2013-12-16 18 views
4

我生成一個私鑰:我怎樣才能讀取PyCrypto標準OpenSSL的RSA私鑰解密它

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. 

誰能告訴我什麼是我的錯?

謝謝!

回答

3

沒有錯。私鑰以密碼保護的PKCS#8結構(在PEM信封內)進行編碼,並且PyCrypto(2.6)的當前版本無法理解該私鑰。

儘管對庫的the current development branch支持PKCS#8。

編輯:PKCS#8,而不是PKCS#7

+0

我使用pycrypto 2.7a1來代替,它的工作原理,thx! – Kizer

+0

如果這解決了您的問題,請您接受它作爲答案嗎?否則,問題保持開放。這是在Stackoverflow上表示感謝:) –

+0

好吧。 @owlstead – Kizer

1

它試圖告訴你,包裝程序庫不支持ASCII裝甲(PEM)。

要解決此問題,請嘗試在您的openssl req行中指定參數-keyform DER

或者將base64取出PEM格式,openssl base64 -d它並將其提供給您的python代碼。