【问题标题】:How to get raw key data from DHPublicKey?如何从 DHPublicKey 获取原始密钥数据?
【发布时间】:2020-05-28 09:15:31
【问题描述】:

我按照说明从 DH 组生成私钥/公钥 https://cryptography.io/en/latest/hazmat/primitives/asymmetric/dh/ 我能做到这一点:

>>> p=0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF
>>> g=2
>>>
>>>
>>> pn = dh.DHParameterNumbers(p, g)
>>> params = pn.parameters(default_backend())
>>> priv = params.generate_private_key()
>>> pub = priv.public_key()
>>> pub.key_size
2048
>>> raw = pub.public_bytes(serialization.Encoding.DER, serialization.PublicFormat.SubjectPublicKeyInfo)
>>> len(raw)
552

我希望密钥长度为 256 字节(正如 pub.key_size 建议的那样),但我找不到任何方法来获取实际的原始密钥数据。根据文档public_bytes() 仅接受SubjectPublicKeyInfo 格式的DHPublicKey

如何获得长度正确的实际密钥数据?

【问题讨论】:

    标签: python cryptography python-cryptography


    【解决方案1】:

    您链接的页面上的示例向您展示了一种生成共享密钥的优越方法,但如果您必须获取原始公钥字节,那么

    y = pub.public_numbers().y    # y is a python int
    pub_bytes = y.to_bytes(2048 // 8, 'big')
    

    会得到它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多