使用OpenSSL生成密钥的Python RSA解密

时间:2009-07-16 19:00:45

标签: python openssl rsa encryption

有没有人知道使用Python库导入OpenSSL RSA私钥/公钥(使用密码)的最简单方法,并使用它来解密邮件。

我已经看了ezPyCrypto,但似乎无法识别OpenSSL RSA密钥,我尝试使用importKey导入密钥,如下所示:

key.importKey(myKey, passphrase='PASSPHRASE')
在我的例子中,myKey是一个以字符串形式表示的OpenSSL RSA公钥/私钥对。

这说:

  

未绑定方法importKey()必须首先使用密钥实例进行调用   参数(改为str实例)

API文档说:

  

importKey(self,keystring,** kwds)

有人可以建议我如何阅读使用ezPyCrypto的密钥吗?我也试过了:

key(key, passphrase='PASSPHRASE')

但是这可以说:

  

ezPyCrypto.CryptoKeyError:已尝试   导入无效密钥或密码   很糟糕

此处链接到文档:

http://www.freenet.org.nz/ezPyCrypto/detail/index.html

编辑:只是对此进行了更新。已成功导入RSA密钥,但由于eqPyCrypto不支持AES分组密码,因此解密时遇到实际问题。只是让人们知道。我成功地设法使用ncrypt(http://tachyon.in/ncrypt/)做我想做的事。由于SWIG和OpenSSL编译问题,我对M2Crypto有一些编译问题,尽管安装的版本超出了最低要求。看起来Python加密/解密框架目前还是一个雷区。哼哼,谢谢你的帮助。

2 个答案:

答案 0 :(得分:6)

第一个错误告诉您需要在importKey实例上调用key

k = key()
k.importKey(myKey, passphrase='PASSPHRASE')

然而,文档似乎表明这是做你想做的更好的方式:

k = key(keyobj=myKey, passphrase='PASSPHRASE')

答案 1 :(得分:5)

目前尚不清楚您想要实现的目标,但您可以试试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