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

2024-05-13 11:04:58 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有人知道用Python库导入OpenSSL RSA私钥/公钥(使用密码短语)并用它解密消息的最简单方法。

我看了一下ezPyCrypto,但似乎无法识别OpenSSL RSA密钥,我尝试导入一个带有importKey的密钥,如下所示:

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

在我的例子中,myKey是用字符串表示的OpenSSL RSA公共/私有密钥对。

这与:

unbound method importKey() must be called with key instance as first argument (got str instance instead)

API文件上说:

importKey(self, keystring, **kwds)

有人能建议我在使用ezPyCrypto时如何读取密钥吗?我也试过:

key(key, passphrase='PASSPHRASE')

但这与:

ezPyCrypto.CryptoKeyError: Attempted to import invalid key, or passphrase is bad

此处链接到文档:

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

编辑:仅此更新。已成功导入RSA密钥,但解密时遇到实际问题,因为eqPyCrypto不支持AES分组密码。只是为了让人们知道。我使用ncrypt(http://tachyon.in/ncrypt/)成功地完成了我想要的任务。由于SWIG和OpenSSL编译问题,我在M2Crypto上遇到了一些编译问题,尽管安装的版本超出了最低要求。Python加密/解密框架目前似乎有点像雷区。呵呵,谢谢你的帮助。


Tags: instancekeyhttp密码密钥rsapassphrase私钥
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

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

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

然而,文档似乎表明,这是一种更好的方式来做您想要的事情:

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

相关问题 更多 >