2017-02-03 49 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。“) –