【问题标题】:How can I read a standard openssl rsa private key with PyCrypto and decrypt with it如何使用 PyCrypto 读取标准 openssl rsa 私钥并用它解密
【发布时间】:2014-01-04 00:32:12
【问题描述】:

我生成了一个私钥:

openssl req -x509 -out anytime-pub.der -outform der -new -newkey rsa:2048 -keyout anytime.pem -days 3650

在我的旧代码中,我使用 M2Crypto 加载密钥文件来解密某些东西,它可以工作。

from M2Crypto import RSA 

ServerRSA = RSA.load_key('keys/anytime.pem', passwd)
key = ServerRSA.private_decrypt(b64decode(cipher),1)

但是当我使用 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.

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

谢谢!

【问题讨论】:

    标签: encryption cryptography rsa x509 pycrypto


    【解决方案1】:

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

    虽然库的the current development branch 提供了对 PKCS#8 的支持。

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

    【讨论】:

    • 如果这解决了您的问题,您能否接受它作为答案?否则问题将保持开放。这是在 Stackoverflow 上表示感谢的方式 :)
    【解决方案2】:

    它试图告诉你包装库不支持 ASCII Armor (PEM)。

    要解决这个问题,请尝试在 openssl req 行中指定参数 -keyform DER

    或者从 PEM 格式中取出 base64,openssl base64 -d 并将其提供给您的 python 代码。

    【讨论】:

      猜你喜欢
      • 2020-02-28
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 2014-05-16
      • 2011-10-17
      • 2013-12-08
      • 2017-07-07
      相关资源
      最近更新 更多