0

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

-----开始证书----- XXXXXXXXXXXXXXXXXXXXXXX -----结束证书-----

使用这个文件,我可以在 PHP 中执行解密并使用openssl_public_decrypt(). 现在我正在尝试在 Python 中执行解密过程。我尝试过:

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

python-rsaM2Crypto没有帮助。

因为M2Crypto我提到了这个链接,但是RSA.load_pub_key_bio(bio)代码行给出了错误。

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

4

1 回答 1

0

您可以使用密码学库的危险品层来执行此操作(请注意,密码学现在是 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'
>>> 
于 2017-02-04T22:55:14.193 回答