专栏名称: dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,Linux 主流平台
目录
今天看啥  ›  专栏  ›  dotNET跨平台

为什么SM2算法签名结果不是64字节?

dotNET跨平台  · 公众号  ·  · 2024-10-22 08:00

文章预览

SM2算法正常不进行编码的签名长度为64个字节,即为R+S,各32个字节;密钥管理服务(KMS)针对签名结果使用ASN.1进行编码。 根据SM2密码算法使用规范,SM2算法签名数据格式的ASN.1定义为: SM2Signature ::= SEQUENCE{  R INTEGER,-- 签名值的第一部分  S INTEGER -- 签名值的第二部分} 其中R和S的长度各为256位。但是在大数INTEGER做der编码时,如果首字节的第一个二进制位为1时,前面需要补00字节,所以导致der编码长度多一个字节,这种情况下SM2签名值的编码长度最大会有两个字节的差距。 其中R和S分别对应: 70个字节,R值,S值均不补00:3044+0220+32个字节R+0220+32个字节S 71个字节,(1)R值补00:3045+022100+32个字节R+0220+32个字节S (2)S值补00:3045+0220+32个字节R+022100+32个字节S 72个字节,R值,S值均补00:3046+022100 +32个字节R+022100+32个字节S 部分特殊场景会存在69字节。R或S的 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览