使用Python的cryptography模块对公钥进行反序列化

8
我正在编写一个涉及通过网络发送公钥的Python脚本。我正在使用<https://cryptography.io/en/latest/hazmat/primitives/asymmetric/serialization/.>。
public_key = self.node.public_key
pem = public_key.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
)

deserialized_key = load_pem_public_key(pem)

我遇到了错误:
TypeError: load_pem_public_key() missing 1 required positional argument: 'backend'

因此我无法反序列化该密钥 - 我感到困惑,因为根据文档,load_pem_public_key()需要1个必需参数(数据)和1个可选参数(后端)。

你应该发送完整的证书,而不仅仅是公钥。 - user207421
3
密码学 < 3.1 需要后端参数。您可以通过 from cryptography.hazmat.backends import default_backend 获取默认后端,并将 default_backend()(请注意,必须将其作为方法调用!)作为参数传递。您还可以升级到3.1+版本。 - Paul Kehrer
2个回答

12

0

即使使用cryptography==3.1,我仍然遇到了问题。

我也无法提供backend参数,因为它是在库(python-jose==3.1)中触发的。升级到python-jose==3.2(=当前最新版本)也没有帮助。

安装python-jose-cryptodome==1.3.2确实有所帮助。


python-jose 文档中相关章节:

Naive Python 后端始终被安装,但如果已安装其他后端,则其他后端将优先。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接