|
25鱼币
求助,怎么生成
private_key = "2B4E468EB817B63B11DDC25A2A403D5EBA4FF50821700D7D1495F01E0A303A05" # sm2的私钥
public_key = "04E8A2EA10BF81E9533C2CBF86CDA759371F6B557291D595727BFFF601F0A6AA8C65E85BA90980CA1D3668A7FF8B2E07ACC5F90445C6149803D883E632D92137BA" # sm2的公钥
这种的sm2密钥对呀,私钥可以用func.random_hex(64)来随机生成,但是公钥不知道怎么用私钥计算,网上找了半天,都是看着好像可以执行,实际都是无法生成公钥的,像
# 使用私钥创建 SM2 密码对象
sm2_crypt = sm2.CryptSM2(public_key='', private_key=private_key)
# 生成公钥
public_key = sm2_crypt.export_public_key() # 这里根本就没有export_public_key()方法
或者
from gmssl import sm2, func
def generate_sm2_key_pair():
private_key = func.random_hex(64)
print(private_key)
sm2_crypt = sm2.CryptSM2(public_key='', private_key=private_key)
public_key = sm2_crypt.get_pubkey() # 这里也是没有get_pubkey()方法的
return private_key, public_key
private_key, public_key = generate_sm2_key_pair()
print(private_key)
print(public_key)
可以试试:
- from gmssl import sm2, func
- def generate_sm2_key_pair():
- private_key = func.random_hex(64)
- sm2_crypt = sm2.CryptSM2(public_key='', private_key=private_key)
- public_key = sm2_crypt._kg(int(private_key, 16), sm2.default_ecc_table['g'])
- public_key_str = '04' + ''.join(['{:02x}'.format(x) for x in public_key])
- return private_key, public_key_str
- private_key, public_key = generate_sm2_key_pair()
- print("私钥:", private_key)
- print("公钥:", public_key)
复制代码
首先生成一个随机的64位十六进制私钥,然后通过椭圆曲线算法计算出相应的公钥。
_kg 方法是 CryptSM2 类的内部方法,用于根据私钥和椭圆曲线参数生成公钥。
|
-
最佳答案
查看完整内容
可以试试:
首先生成一个随机的64位十六进制私钥,然后通过椭圆曲线算法计算出相应的公钥。
_kg 方法是 CryptSM2 类的内部方法,用于根据私钥和椭圆曲线参数生成公钥。
|