如何为给定secp256r1私钥生成ECIES公钥

2024-10-01 07:11:38 发布

您现在位置:Python中文网/ 问答频道 /正文

如何为给定的secp256r1私钥生成ECIES公钥,如3GPP TS 33.501版本15.5.0发行版15,C.3.4.2中定义的“配置文件B”所用的密钥

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

家庭网络公钥:
如果压缩:“0272DA71976234CE833A6907425867B82E074D44EF907DFB4B3E21C1C2256EBCD1”,
否则未压缩:“0472DA71976234CE833A6907425867B82E074D44EF907DFB4B3E21C2256EBCD15A7DED52FCBB097A4ED250E036C7B9C8C7004C4EEDC4F068CD7BF8D3F900E3B4”

我已经使用了Python CryptoMobile套件,可以为概要文件A获得正确的结果。但是我还不能为概要文件B修改它。我也对其他库/语言持开放态度

谢谢


Tags: 文件版本规范定义套件配置文件密钥私钥
1条回答
网友
1楼 · 发布于 2024-10-01 07:11:38

在对加密源代码进行了一些挖掘之后,我提出了以下解决方案:

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'

相关问题 更多 >