2017-01-30 374 views
1

我有一個方法,下面那個標誌提供的數據顯示:爲什麼在RSA中不支持使用RSA私鑰加密RSA密鑰格式的數據?

def sign_data(self, private_key_loc, data): 
     """ 
     param: private_key_loc Path to your private key 
     param: package Data to be signed 
     return: base64 encoded signature 
     """ 
     key = open(private_key_loc, "r").read() 
     print(key) 
     rsakey = RSA.importKey(key) # This raise an error!!!! 
     print(rsakey) 
     signer = PKCS1_v1_5.new(rsakey) 
     digest = SHA256.new() 
     # It's being assumed the data is base64 encoded, so it's decoded before updating the digest 
     digest.update(data) 
     sign = signer.sign(digest) 
     return b64encode(sign) 

私鑰的格式如下:

<RSAKeyValue><Modulus>nEWZmLeK0zgEWysFFcpcT6lnYpzYcXFf+r43wD73ko+CjR5EmwDsmlKqKS5y3rpIHQrj+xE+yiNGlcPFNwFl3cCcHPkeI0hqaPPYxE2XeP6Wa0keegny2AWWK2Cuv61YHVz4XgxTPBX7B/19ClN4wzI5CoNc9jkx0PIXEo5iWLk=</Modulus><Exponent>AQAB</Exponent><P>0b5D6oI3mOKKIHgfCrl03vfUTo91UeJyvpZ1l6F6NzUzPDhCG3Sin5dXtxEFejPayLsgLOIMMuqobOzI9wJpBQ==</P><Q>vrxvorDFE3g1cj2kWWWZc2BS7UMf+xxnPhtBR3x3T/DyTEnkEXvGLdRBuUGWKhxUpRcBkcBfAadJjhYUqYBvJQ==</Q><DP>SKYKiDPKZh4xkcWJmwFZxdE5rGxsSoyRCgq7eGXqGy1GLdmerDveCEE3lKVErGtBoL2QC3vQleJJrFDn2wbusQ==</DP><DQ>sIoTPd8lmd6ygVnCq6fZPywRtV9i03a3rIlng3YVrN1UNv5RZUlN5g9HAeRNzA5K3j8MCc6nYQ1ojGWtnDGvLQ==</DQ><InverseQ>rQzqbkXZ9Tmno3ElcliX57Xv4AXyF6yFO1kH4LHwkc8jN5dB9XYEdBIgm43yHFIznvOdc2L9Nkl2nHbFCeAKmg==</InverseQ><D>XA7IN+XP2zPBpS9HlJmcHbWO2NHK07FVODH8R70QPP9bieRNx/4YY6TU5uOc+cZFGw7CVLHJCm0TdMBaGlgxeC/GTwMrCJigxUgaxbvDmxuSpqYqkjoZhgoZAuUct8RaZUN8zNdEsXCqRhbU61U2Ey587RyPQ7varg9hkPicVHE=</D></RSAKeyValue> 

注意:私有密鑰被測試NOTHING旅遊居停

看來它是在XML格式中創建的。

在行RSA.importKey(key)錯誤引發如下:

ValueError: RSA key format is not supported 

我應該如何養活私有密鑰對數據進行簽名?

我甚至試圖通過解析XML形成RSA密鑰,並做一些事情,如下所示:

rsakey = Crypto.PublicKey.RSA.construct((root.find('Modulus').text, root.find('Exponent').text,root.find('D').text)) 

它給出這樣的錯誤:

assert isinstance(n, long) 
AssertionError 
+0

你或許應該現在處理的是關鍵的。 –

+0

您在公共網站上發佈了私鑰。你不應該把它用於任何有價值的東西。 –

+0

@JonasWielicki它用於測試目的。沒有什麼價值 – ALH

回答

0

RSA需要PEM文件格式,以便籤署數據。由於我的私鑰不重要!我用了一個在線網站轉換XMLPEM不要做這在真正的私有密鑰:|)。現在起作用了。

我的PEM文件現在如下:

-----BEGIN RSA PRIVATE KEY----- 
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJxFmZi3itM4BFsr 
BRXKXE+pZ2Kc2HFxX/q+N8A+95KPgo0eRJsA7JpSqikuct66SB0K4/sRPsojRpXD 
xTcBZd3AnBz5HiNIamjz2MRNl3j+lmtJHnoJ8tgFlitgrr+tWB1c+F4MUzwV+wf9 
fQpTeMMyOQqDXPY5MdDyFxKOYli5AgMBAAECgYBcDsg35c/bM8GlL0eUmZwdtY7Y 
0crTsVU4MfxHvRA8/1uJ5E3H/hhjpNTm45z5xkUbDsJUsckKbRN0wFoaWDF4L8ZP 
AysImKDFSBrFu8ObG5KmpiqSOhmGChkC5Ry3xFplQ3zM10SxcKpGFtTrVTYTLnzt 
HI9Du9quD2GQ+JxUcQJBANG+Q+qCN5jiiiB4Hwq5dN731E6PdVHicr6WdZehejc1 
Mzw4Qht0op+XV7cRBXoz2si7ICziDDLqqGzsyPcCaQUCQQC+vG+isMUTeDVyPaRZ 
ZZlzYFLtQx/7HGc+G0FHfHdP8PJMSeQRe8Yt1EG5QZYqHFSlFwGRwF8Bp0mOFhSp 
gG8lAkBIpgqIM8pmHjGRxYmbAVnF0TmsbGxKjJEKCrt4ZeobLUYt2Z6sO94IQTeU 
pUSsa0GgvZALe9CV4kmsUOfbBu6xAkEAsIoTPd8lmd6ygVnCq6fZPywRtV9i03a3 
rIlng3YVrN1UNv5RZUlN5g9HAeRNzA5K3j8MCc6nYQ1ojGWtnDGvLQJBAK0M6m5F 
2fU5p6NxJXJYl+e17+AF8heshTtZB+Cx8JHPIzeXQfV2BHQSIJuN8hxSM57znXNi 
/TZJdpx2xQngCpo= 
-----END RSA PRIVATE KEY-----