2014-01-05 55 views
0

我想用一个私有密钥解密一个十六进制格式的消息,这个私钥也是十六进制格式,包括Python和pycrypto模块。每次我写最后一行代码时,“rsakey ...”出现错误“binAscii.Error:不正确的填充”。我知道这个工程使用pycrypto而不是M2Crypto,因为一个同事已经成功解密了这个消息。我错过了什么?我忘了提及我在键的开始处输入了“----- BEGIN RSA PRIVATE KEY ----”,在键的结尾输入了END。使用pycrypto解密一个PEM RSA密钥

from Crypto.PublicKey import RSA 
key = open("/path/to/key", "r").read() 
rsakey = RSA.importKey(key) 
+0

请向我们展示所有代码,包括如何处理IO和文件本身。 –

+0

这是所有的代码。默认情况下,密钥文件是连续的十六进制字符序列,不带换行符。当我使用密钥文件(我在Linux上)时,“file”命令返回。所有的代码是否意味着完整的错误输出? – Dragos276

回答

1

-----BEGIN RSA PRIVATE KEY----用于PEM编码(也称为ASCII装甲)密钥。这些密钥应该是PKCS#8或#12 DER编码的专用密钥,然后编码为64位,并由开始和结束行(如您所述)包围。

只要把-----BEGIN RSA PRIVATE KEY---------END RSA PRIVATE KEY----左右的数据不会削减它。

+0

对于迟到的响应我非常抱歉,但是我在Linux中执行base64命令时遇到了困难。事实证明,使用Linux命令在base64中对密钥进行编码使得它不可能将其加载到Python中的RSA私钥对象中。该命令不包括填充,并且很可能会更改密钥,导致解密失败。经过多次尝试,我尝试使用网站进行编码,解决了填充问题并成功解密了邮件。感谢您的回复,并再次为已故对号再次抱歉。 – Dragos276

+0

另外,我似乎对我的Pycrypto安装有问题,因为我无法从Crypto.Cipher导入任何东西。经过对互联网的研究,我发现有些人有这个问题,除了重装Pycrypto模块之外,目前还没有发布解决方案,直到它工作。 – Dragos276