使用Python中的公钥进行解密

时间:2017-02-03 10:14:26

标签: php python rsa public-key python-cryptography

问题是反复询问,但我无法完成工作,所以再次发布。 我共享一个公钥文件,格式为

  

----- BEGIN CERTIFICATE ----- XXXXXXXXXXXXXXXXXXXXXXX -----结束证书-----

使用此文件,在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)代码行会出错。

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用cryptography库的hazmat层执行此操作(请注意,加密现在是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:*\x06@\r|e\xcdL\xfe9\x80R\x82c\x00\xc0\x9as\xea'
>>> pkey.decrypt(ciphertext, padding.PKCS1v15())
'asdasd'
>>>