2014-01-05 54 views
0

我想用一個私有密鑰解密一個十六進制格式的消息,這個私鑰也是十六進制格式,包括Python和pycrypto模塊。每次我寫最後一行代碼時,「rsakey ...」出現錯誤「binAscii.Error:不正確的填充」。我知道這個工程使用pycrypto而不是M2Crypto,因爲一個同事已經成功解密了這個消息。我錯過了什麼?我忘了提及我在鍵的開始處輸入了「----- BEGIN RSA PRIVATE KEY ----」,在鍵的結尾輸入了END。使用pycrypto解密一個PEM RSA密鑰

from Crypto.PublicKey import RSA 
key = open("/path/to/key", "r").read() 
rsakey = RSA.importKey(key) 
+0

請向我們展示所有代碼,包括如何處理IO和文件本身。 –

+0

這是所有的代碼。默認情況下,密鑰文件是連續的十六進制字符序列,不帶換行符。當我使用密鑰文件(我在Linux上)時,「file」命令返回。所有的代碼是否意味着完整的錯誤輸出? – Dragos276

回答

1

-----BEGIN RSA PRIVATE KEY----用於PEM編碼(也稱爲ASCII裝甲)密鑰。這些密鑰應該是PKCS#8或#12 DER編碼的專用密鑰,然後編碼爲64位,並由開始和結束行(如您所述)包圍。

只要把-----BEGIN RSA PRIVATE KEY---------END RSA PRIVATE KEY----左右的數據不會削減它。

+0

對於遲到的響應我非常抱歉,但是我在Linux中執行base64命令時遇到了困難。事實證明,使用Linux命令在base64中對密鑰進行編碼使得它不可能將其加載到Python中的RSA私鑰對象中。該命令不包括填充,並且很可能會更改密鑰,導致解密失敗。經過多次嘗試,我嘗試使用網站進行編碼,解決了填充問題併成功解密了郵件。感謝您的回覆,並再次爲已故對號再次抱歉。 – Dragos276

+0

另外,我似乎對我的Pycrypto安裝有問題,因爲我無法從Crypto.Cipher導入任何東西。經過對互聯網的研究,我發現有些人有這個問題,除了重裝Pycrypto模塊之外,目前還沒有發佈解決方案,直到它工作。 – Dragos276