【问题标题】:How to generate the ECIES public key for a given secp256r1 private key如何为给定的 secp256r1 私钥生成 ECIES 公钥
【发布时间】:2021-08-16 01:58:30
【问题描述】:

如何为给定的 secp256r1 私钥生成 ECIES 公钥,就像 3GPP TS 33.501 版本 15.5.0 版本 15、C.3.4.2 中定义的“配置文件 B”所使用的一样?

如果提供了私钥 F1AB1074477EBCC7F554EA1C5FC368B1616730155E0041AC447D6301975FECDA(来自上述规范的 C.4.4),我如何获得公钥:

家庭网络公钥:
如果压缩:'0272DA71976234CE833A6907425867B82E074D44EF907DFB4B3E21C1C2256EBCD1',
否则未压缩:'0472DA71976234CE833A6907425867B82E074D44EF907DFB4B3E21C1C2256EBCD15A7DED52FCBB097A4ED250E036C7B9C8C7004C4EEDC4F068CD7BF8D3F900E3B4'

我已经使用过 Python CryptoMobile 套件,并且可以为 Profile A 获得正确的结果。但我无法为 Profile B 修改它。我也对其他库/语言持开放态度。

谢谢

【问题讨论】:

    标签: python private-key public-key ecies


    【解决方案1】:

    在对密码学源代码进行了一番挖掘之后,我想出了这个解决方案:

    from cryptography.hazmat.primitives import serialization
    from cryptography.hazmat.primitives import asymmetric
    
    priv_key = 'F1AB1074477EBCC7F554EA1C5FC368B1616730155E0041AC447D6301975FECDA'
    privkey_int = int(priv_key, base=16)
    privkey_ec = asymmetric.ec.derive_private_key(privkey_int, asymmetric.ec.SECP256R1())
    pubkey_ec = privkey_ec.public_key()
    pubkey_bytes = pubkey_ec.public_bytes(
        encoding=serialization.Encoding.X962, 
        format=serialization.PublicFormat.CompressedPoint
    )
    print(binascii.hexlify(pubkey_bytes).decode('utf-8'))
    '0272DA71976234CE833A6907425867B82E074D44EF907DFB4B3E21C1C2256EBCD1'
    

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 2019-08-15
      • 2022-01-13
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2014-08-16
      相关资源
      最近更新 更多