sách gpt4 ăn đã đi

python - 如何在 PyCrypto 中使用加密的 RSA 私钥?

In lại 作者:太空狗 更新时间:2023-10-29 23:59:02 25 4
mua khóa gpt4 giày nike

我正在使用 OpenSSL 生成 key ,提供来自标准输入的密码:

openssl genpkey -algorithm RSA -out private-key.pem -outform PEM -pass stdin -des3 -pkeyopt rsa_keygen_bits:4096

key 看起来像:

-----BEGIN ENCRYPTED PRIVATE KEY-----
XXX...
-----END ENCRYPTED PRIVATE KEY-----

我的 Python 代码如下所示:

from Crypto.PublicKey import RSA
# ...
f = open('private-key.pem', 'r')
r = RSA.importKey(f.read(), passphrase='some-pass')
f. đóng()

但我遇到了一个异常(exception):

  File "/usr/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 665, in importKey
return self._importKeyDER(der)
File "/usr/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 588, in _importKeyDER
raise ValueError("RSA key format is not supported")
ValueError: RSA key format is not supported

怎么了?

是否可以生成一个加密的 RSA key ,将其存储在一个文件中,然后在 PyCrypto 中使用它?可以用 OpenSSL 来做吗?支持哪些格式?

导入公钥工作正常,但未加密。

câu trả lời hay nhất

假设#1

看了源码,我想,我解开了谜团。导入使用密码加密的 PEM key 的工作方式是 PEM 被解密为 DER,然后调用 importKeyDER 函数。如果提供的密码不正确,生成的 DER 表示格式也将不正确,您将得到您提供的异常。为了确认这一点,我在下面运行了两个快速测试:

>>> from Crypto.PublicKey import RSA
>>> f = open('/private-key.pem','r')
>>> r=RSA.importKey(f.read(),passphrase='foo')
Theo dõi (cuộc gọi gần đây nhất là cuộc gọi cuối cùng):
Tệp "", dòng 1, trong
File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 665, in importKey
return self._importKeyDER(der)
File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 588, in _importKeyDER
raise ValueError("RSA key format is not supported")
ValueError: RSA key format is not supported
>>> f = open('/private-key.pem','r')
>>> r=RSA.importKey(f.read(),passphrase='')
>>> r
<_RSAobj @0xb7237b2c n(4096),e,d,p,q,u,private>

在收到作者的 PEM 后,我意识到假设 #1 对他的案例无效。我仍然想将它保留在这里作为导入失败的一个可能原因,以便其他用户知道。

假设 #2 - 这是作者的情况。

RSA.py 在 PEM 文件中查找以下内容以确定对 PEM 应用了哪种加密:

 Proc-Type: 4,ENCRYPTED

当使用“openssl genrsa ...”命令生成 key 时,此字符串以明文形式存在于 PEM 中,但是当使用“opensl genpkey ...”时,“Proc-Type”不存在。

如果找不到“Proc-Type”,RSA.py 甚至不会尝试解密 PEM:

  # The encrypted PEM format
if lines[1].startswith(b('Proc-Type:4,ENCRYPTED')):
DEK = lines[2].split(b(':'))
....

因此,我此时的结论是 PyCrypto v 2.6.1 不支持“openssl genpkey”生成的 key 。

重要更新

它在 PyCrypto 的最新版本 2.7a1 中确实有效。你可以从这里下载它:http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.7a1.tar.gz

>>> f = open('key.pem','r')
>>> r = RSA.importKey(f.read(), passphrase='123456')
>>> r
<_RSAobj @0xb6f342ec n(2048),e,d,p,q,u,private>

关于python - 如何在 PyCrypto 中使用加密的 RSA 私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23848849/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress