使用OpenSSL生成的密钥进行Python RSA解密
有没有人知道用Python库导入OpenSSL的RSA私钥/公钥(需要密码)并用它解密消息的最简单方法是什么?
我看过ezPyCrypto,但似乎无法识别OpenSSL的RSA密钥。我尝试用importKey导入密钥,代码如下:
key.importKey(myKey, passphrase='PASSPHRASE')
在我的例子中,myKey是一个以字符串形式表示的OpenSSL RSA公钥/私钥对。
但是出现了这个错误:
未绑定的方法importKey()必须以密钥实例作为第一个参数调用(而我传入的是字符串实例)
API文档上写着:
importKey(self, keystring, **kwds)
有没有人能建议我如何用ezPyCrypto读取密钥?我还尝试过:
key(key, passphrase='PASSPHRASE')
但也出现了这个错误:
ezPyCrypto.CryptoKeyError: 尝试导入无效的密钥,或者密码错误
文档链接在这里:
http://www.freenet.org.nz/ezPyCrypto/detail/index.html
编辑:这是我的更新。我成功导入了一个RSA密钥,但在解密时遇到了麻烦,因为ezPyCrypto不支持AES块密码。只是让大家知道一下。我成功使用ncrypt完成了我想做的事情(http://tachyon.in/ncrypt/)。我在使用M2Crypto时遇到了一些编译问题,主要是SWIG和OpenSSL的编译问题,尽管我安装的版本超过了最低要求。看起来目前Python的加密/解密框架有点复杂。唉,感谢大家的帮助。
2 个回答
我不太清楚你想要实现什么,但你可以试试M2Crypto。从我的角度来看,它是Python中最好用的OpenSSL封装库。
下面是一个RSA加密和解密的示例代码:
import M2Crypto as m2c
import textwrap
key = m2c.RSA.load_key('key.pem', lambda prompt: 'mypassword')
# encrypt something:
data = 'testing 123'
encrypted = key.public_encrypt(data, m2c.RSA.pkcs1_padding)
print "Encrypted data:"
print "\n".join(textwrap.wrap(' '.join(['%02x' % ord(b) for b in encrypted ])))
# and now decrypt it:
decrypted = key.private_decrypt(encrypted, m2c.RSA.pkcs1_padding)
print "Decrypted data:"
print decrypted
print data == decrypted
第一个错误告诉你,importKey
这个方法需要在一个 key 的实例上调用。
k = key()
k.importKey(myKey, passphrase='PASSPHRASE')
不过,文档里似乎建议你有一个更好的方法来实现你想要的功能:
k = key(keyobj=myKey, passphrase='PASSPHRASE')