如何使用 PyCrypto 读取标准 openssl rsa 私钥并用它解密

Kiz*_*zer 5 encryption cryptography rsa x509 pycrypto

我生成了一个私钥:

openssl req -x509 -out anytime-pub.der -outform der -new -newkey rsa:2048 -keyout anytime.pem -days 3650
Run Code Online (Sandbox Code Playgroud)

在我的旧代码中,我使用 M2Crypto 加载密钥文件来解密某些内容,并且它有效。

from M2Crypto import RSA 

ServerRSA = RSA.load_key('keys/anytime.pem', passwd)
key = ServerRSA.private_decrypt(b64decode(cipher),1)
Run Code Online (Sandbox Code Playgroud)

但是当我使用 pycrypto 做同样的事情时,会出现以下错误:

>>> from Crypto.PublicKey import RSA
>>> key = RSA.importKey(open('keys/anytime.pem', 'r'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/xyzkizer/Projects/AnytimeBackend/env/lib/python2.7/site-packages/Crypto/PublicKey/RSA.py", line 641, in importKey
    raise ValueError("PEM encryption format not supported.")
ValueError: PEM encryption format not supported.
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我的错误是什么?

谢谢你!

Squ*_*ree 3

没有错误。私钥以受密码保护的 PKCS#8 结构(在 PEM 信封内)进行编码,当前版本的 PyCrypto (2.6) 无法理解该结构。

不过,该库的当前开发分支提供了对 PKCS#8 的支持。

编辑:PKCS#8,而不是 PKCS#7