关于Python的GMSSL库里面验证签名无法与别的工具通用的问题

  由于工作原因,需要使用到国密加密算法,而且需要使用Python来做,于是就找来了Python中的gmssl库函数来进行使用。

  在使用gmssl库的时候,可以使用在这个函数当中进行上面sm2自我签名与验签,但是其他工具产生的sm2签名无法通过该工具进行签名验证。在查找了GitHub之后,发现了问题所在,在对于sm2签名的时候,该函数是直接对于源数据进行签名,在算法的标准当中,签名是需要进行hash算法,对于源数据进行hash计算,产生中间值e,签名是对e进行签名的,同样,验签也是对e进行验签,所以该函数是不正确的。

  改进办法,采用函数,对于原始数据进行hash计算,得出e值之后,使用e值进行签名与验签,即可和其他工具进行通用。

  首先对于用户输入的参数进行计算Za值,使用sm3算法,算法的过程如下:

def sm2_hash_e(data, id, idlen, publickey):   
    a = b'\xFF\xFF\xFF\xFE\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF' \
        b'\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC'

    b = b'\x28\xE9\xFA\x9E\x9D\x9F\x5E\x34\x4D\x5A\x9E\x4B\xCF\x65\x09\xA7' \
        b'\xF3\x97\x89\xF5\x15\xAB\x8F\x92\xDD\xBC\xBD\x41\x4D\x94\x0E\x93'

    gx = b'
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值