【问题标题】:Deserializing public key with python's cryptography module使用 python 的加密模块反序列化公钥
【发布时间】:2020-09-04 09:08:14
【问题描述】:

我正在编写一个涉及通过网络发送公钥的 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 个可选参数(后端)。

【问题讨论】:

  • 您应该发送整个证书,而不仅仅是公钥。
  • cryptography from cryptography.hazmat.backends import default_backend 获取默认后端并将default_backend()(请注意,您必须将其作为方法调用!)作为参数。您也可以升级到 3.1+。

标签: python serialization cryptography deserialization public-key-encryption


【解决方案1】:

看起来您使用 cryptography==3.0 或更低,其中需要 backend 参数 https://github.com/pyca/cryptography/blob/3.0/src/cryptography/hazmat/primitives/serialization/base.py#L19

撞到cryptography==3.1 或把东西放到backend arg

【讨论】:

    【解决方案2】:

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

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

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


    python-jose 文档的相关部分:

    Th[e naive python] 后端始终会安装,但如果安装了任何其他后端,则将优先。

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2020-02-23
      相关资源
      最近更新 更多