2017-02-03 48 views
0

問題被反覆詢問,但我無法完成工作,因此再次發佈。 我共享一個公共密鑰文件,該文件是在在Python中使用公鑰解密

格式----- BEGIN CERTIFICATE ----- ----- XXXXXXXXXXXXXXXXXXXXXXX END CERTIFICATE -----

使用這個文件,在PHP中,我能夠使用openssl_public_decrypt()執行解密並獲得解碼的消息。現在我正試圖在Python中執行解密過程。我曾嘗試用:

Crypto - gives 'valueerror: rsa key format is not supported' when RSA.importKey() is called. 

python-rsaM2Crypto也沒有幫助。

對於M2Crypto我提到了link,但是RSA.load_pub_key_bio(bio)代碼行給出了錯誤。

任何幫助真的很感激。謝謝。

回答

0

您可以用cryptography庫的危險品層做到這一點(請注意,現在密碼是pyOpenSSL採用後端庫;而pyOpenSSL方便一些用途,加密提供了一個更完整的OpenSSL的結合以及有用的更高級別(更安全,更好)的密碼原語以及與其他密碼庫的綁定)。在你做之前,請注意,在危險區層面拍攝自己的腳很容易,如果你這樣做,密碼團隊不會道歉。

在您依賴代碼提供任何安全性之前,您應該確定您已瞭解這些操作的進展情況。另外,如果你控制整個堆棧 - 從加密到解密 - 停止這樣做。改用PGP之類的東西。

>>> from cryptography.hazmat.backends import default_backend 
>>> from cryptography.hazmat.primitives import serialization 
>>> with open("key.pem") as key_file: 
...  pkey = serialization.load_pem_private_key(key_file.read(), password=None, backend=default_backend()) 
... 
>>> from cryptography.hazmat.primitives.asymmetric import padding 
>>> ciphertext = pkey.public_key().encrypt(b"asdasd", padding.PKCS1v15()) 
>>> print repr(ciphertext) 
'*\xf3\x8e2T\x8f\x93\xae}\x18\x9f7\x00\xbcw\xbd$\x14\x9f6\x9a\xc3\xa1\xa8\xf3\xa5\xcc\xae\x89\x17]\x91\x1d\x85\xb0.\xf7&\x12w\x0ca\x1cN\xd2\x8f\xf5\xf7\xfe\x93\xfbL\x17#\xc6g\x1dj\x84\xc3ET\xd1\x92 \xd2u\xc7AF\xa9<4i`d\xdb\xc0%\xae\x06\xc4\xeeJsC\x06\x80\xc9* \x11\x99P\xdc\xa9S\xad\xe2\xe5L\x9f\x9f\x0c\x04\xef\x95\xd7:*\[email protected]\r|e\xcdL\xfe9\x80R\x82c\x00\xc0\x9as\xea' 
>>> pkey.decrypt(ciphertext, padding.PKCS1v15()) 
'asdasd' 
>>> 
+0

嗨,謝謝你的回答。我在回答這個問題後回答這個問題的原因是 - 我在安裝'cryptography'軟件包時遇到了問題,最後得到修復,其次,在您提供的代碼片段中,我得到的錯誤不是名爲'serialization'的模塊。我通過包搜索這個模塊,但有多個序列化器,所以混淆了哪一個使用,他們不通用。如果你更新答案會很有幫助。我只執行解密。只有加密數據提供給我。 –

+0

抱歉,他錯過了導入!添加。 –

+0

我在執行'pkey = serialization.load_pem_private_key(key_file.read(),password = None,backend = default_backend())'行時遇到了問題,'File'/usr/local/lib/python2.7/ dist-packages/cryptography/hazmat/backends/openssl/backend.py「,第1325行,在_handle_key_loading_error中 raise ValueError(」Could not unserialize key data。「) –