python通过gmssl进行SM2国密算法签名实战踩坑

现在国密算法用的是越来越多,之前JAVA采用hutool工具包进行签名,还算顺利,但是最近想把功能切到python中,困扰了我大半年时间,终于得到解决。

其实官方的例子没有问题,如下:

1. 初始化CryptSM2

import base64
import binascii
from gmssl import sm2, func
#16进制的公钥和私钥
private_key = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5'
public_key = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207'
sm2_crypt = sm2.CryptSM2(
    public_key=public_key, private_key=private_key)

2. sign_with_sm3

data = b"111" # bytes类型
sign = sm2_crypt.sign_with_sm3(data) #  16进制

问题:

1、之前做Java的时候,签名只需要设置私钥,公钥设置为空,所以我使用gmssl进行签名,也想当然的把公钥设置''(其实gmssl不允许public_key设置为None,就应该想到),导致签名的值一直无法验签。所以再次强调,gmssl签名一定要设置公钥

2、gmssl获取公钥时ÿ

你可能感兴趣的:(python)