如何为给定的secp256r1私钥生成ECIES公钥,比如在3 3GPP 33.501版本15.5.0版本15,C.3.4.2中定义的“配置文件B”?
如果提供了私钥F1AB1074477EBCC7F554EA1C5FC368B1616730155E0041AC447D6301975FECDA (来自上述规范的C.4.4 ),我如何导出公钥:
家庭网络公钥:
如果压缩:'0272DA71976234CE833A6907425867B82E074D44EF907DFB4B3E21C1C2256EBCD1',
否则未压缩:'0472DA71976234CE833A6907425867B82E074D44EF907DFB4B3E21C1C2256EBCD15A7DED52FCBB097A4ED250E036C7B9C8C7004C4EEDC4F068CD7BF8D3F900E3B4‘
我使用过Python套件,可以为概要文件A获得正确的结果。但是,我还没有能够为概要文件B修改它。我也向其他库/语言开放。
谢谢
发布于 2021-08-17 13:45:04
在深入研究了密码学源代码之后,我想出了以下解决方案:
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'https://stackoverflow.com/questions/67728373
复制相似问题