公司原计划是年后让我直接去公安一所过35114的认证,但是突发疫情,导致上班时间一推再推,最后也只能远程用升级包的方式给检测员进行认证。

前几次的尝试,服务器一直回复401,让我百思不得其解,甚至开始让我产生对算法的怀疑。现在回过头来看,其实SM2签名格式不理解是导致一直验签失败的主要原因。

按照国密的规范,SM2签名结果r||s长度应该是(r:32字节)+(s:32字节)64字节,就算加个04头字节,也是65个字节。但是,我参考网上有限的资料发现sign1签名MEQCIC24h6tnaKcOnxNZe93rtLFrKEqM9R3yG8/Ba2+tyE+3AiBTG46yfxJziYDlaH1WZjrCfRloIuMnfx5oyEVuwgbV0A==长度为96字节,这一看就是base64加密数据,源签名长度96/4*3=72字节。

SM2签名结果长度为64字节,为什么出来的是72字节?我咨询过好几个过35114的博客主,回复都是,我们是硬加密。/(ㄒoㄒ)/~~

其实,SM2签名结果数据是要经过asn.1(der格式)编码的。

编码结果长度在70-72变化。

我们来看openssl内通过

int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp);
ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len);
函数来进行对ECDSA_SIG格式与asn.1编码相互转化的。

最后附上注册数据包

REGISTER sip:34020000002000000001@192.168.1.81:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.198:5060;rport;branch=z9hG4bKPjxp5SsGzh.j3U8MYfe.5RmOV-H483DWnt
Max-Forwards: 70
From: <sip:34020000001320000001@192.168.1.81>;tag=vRq11dVmXG7i5AqD26oyX.mQM-tjGsLT
To: <sip:34020000001320000001@192.168.1.81>
Call-ID: 151959520
CSeq: 1 REGISTER
Expires: 3600
Authorization: Capability algorithm="A:SM2;H:SM3;S:SM4/OFB/PKCS5;SI:SM3-SM2",keyversion="1970-8-16T19:54:35"
Contact: <sip:34020000001320000001@192.168.1.198:5060>
Content-Length:  0SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.1.198:5060;rport=5060;branch=z9hG4bKPjxp5SsGzh.j3U8MYfe.5RmOV-H483DWnt
From: <sip:34020000001320000001@192.168.1.81>;tag=vRq11dVmXG7i5AqD26oyX.mQM-tjGsLT
To: <sip:34020000001320000001@192.168.1.81>;tag=894209716
Call-ID: 151959520
CSeq: 1 REGISTER
User-Agent: eXosip/4.1.0
Expires: 3600
Date: 2020-03-09T15:24:47.054
WWW-Authenticate: Bidirection algorithm="A:SM2;H:SM3;S:SM4/OFB/PKCS5;SI:SM3-SM2", random1="iqxeFEd+zXOwlgxERVI6RQ=="
Content-Length: 0REGISTER sip:34020000002000000001@192.168.1.81:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.198:5060;rport;branch=z9hG4bKPj4BWBr8Ul2sCtikHC6SUB4UqMzghmUY5q
Max-Forwards: 70
From: <sip:34020000001320000001@192.168.1.81>;tag=vRq11dVmXG7i5AqD26oyX.mQM-tjGsLT
To: <sip:34020000001320000001@192.168.1.81>;tag=894209716
Call-ID: 151959520
CSeq: 2 REGISTER
Contact: <sip:34020000001320000001@192.168.1.198:5060>
Expires: 3600
Authorization: Bidirection random1="iqxeFEd+zXOwlgxERVI6RQ==",random2="skFXTJAlP98cbUkeeCSx7w==",serverid="34020000002000000001",sign1="MEQCIC24h6tnaKcOnxNZe93rtLFrKEqM9R3yG8/Ba2+tyE+3AiBTG46yfxJziYDlaH1WZjrCfRloIuMnfx5oyEVuwgbV0A==",algorithm="A:SM2;H:SM3;S:SM4/OFB/PKCS5;SI:SM3-SM2"
Content-Length:  0SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.198:5060;rport=5060;branch=z9hG4bKPj4BWBr8Ul2sCtikHC6SUB4UqMzghmUY5q
From: <sip:34020000001320000001@192.168.1.81>;tag=vRq11dVmXG7i5AqD26oyX.mQM-tjGsLT
To: <sip:34020000001320000001@192.168.1.81>;tag=894209716
Call-ID: 151959520
CSeq: 2 REGISTER
User-Agent: eXosip/4.1.0
Expires: 3600
Date: 2020-03-09T15:24:47.267
SecurityInfo: Bidirection algorithm="A:SM2;H:SM3;S:SM4/OFB/PKCS5;SI:SM3-SM2",random1="iqxeFEd+zXOwlgxERVI6RQ==",random2="skFXTJAlP98cbUkeeCSx7w==",deviceid="34020000001320000001",cryptkey="MHoCIQC8G0MLIbZfce7F2voDAN+FCpJf/oY/2SRPCJRos1i4NQIhAJq2pNkZBF4Zrvt9Pq9UaWstOYRANhBZ0PHj5XkkzxFRBCCrEsniIp5VqgY1b9wHspo2kmjZFhvN7ctrN5gex9SyUQQQeoRLl5cPoCPf0Z5oNeflGw==",sign2="MEUCIG3sSFbbCXelzhNxrTsZsHYdJv2Oy0WHHKTJpksxJVvxAiEA6ADKoX970RmZS+5NTaMiUsg0S4H3uaqO+Jy1tKvSIaQ="
Content-Length: 0

有错误请留言,谢谢

---bob  2020/3/17

GB35114---聊聊SM2签名格式相关推荐

  1. 由asn1编码引发对sm2签名长度思考

    起因 工作相关的朋友咨询我sm2签名长度的问题,故有了这篇文章. 过程 问:按照国密规范,签名长度64,为什么长度可变? 答:要按这个假设,应该的范围是68,69,70,71,72. 最好是按asn1 ...

  2. java 国密p7验签_go/Java 国密sm2签名验签

    近期go项目对接第三方Java服务,第三方要求使用国密sm3/sm2算法进行数据签名验签,特记录go端开发注意事项 1 关于密钥对 密钥生成可以使用openssl库,openssl版本至少是1.1.1 ...

  3. SM2签名方案的安全性

    文章目录 前言 一.Contribution 二.Preliminaries 1. Uniform (Smooth) Hash Functions^[https://link.springer.com ...

  4. 国密SM4加解密SM2签名验签COM组件DLL

    提供给第三方软件,调用COM组件DLL方式进行实现,如delphi.PB等. 基于C#编写的COM组件DLL,可实现SM2签名验签,SM4加解密,100%适用于黑龙江省国家医保接口中进行应用. 功能包 ...

  5. 基于gmssl SM2 签名验签测试程序

    基于gmssl SM2 签名验签测试程序 前言 一.sm2 签名流程 二.sm2 验签流程 三.测试结果 总结 前言 在之前的文章中讲解了基于gmssl 的SM2的加解密接口的测试程序,这里主要讲解签 ...

  6. 基于OpenSSL 1.1.1版实现的SM2签名与验签C程序

    OpenSSL 1.1.1 版提供了对国密 SM4.SM3.SM2 算法的支持.对于 SM2 算法,在源码的 crypto/sm2 目录下,sm2_sign.c 文件中实现了 SM2 签名与验签, s ...

  7. iOS 使用 SM2 SM4 加解密,SM2 签名验签及 SM3 签名

    前言 对于开发人员,开发中加解密是经常用到的,常见的密码算法 MD5.SHA.AES.DES,RSA 等等,这些无一例外都是国外的加密算法.基于安全和宏观战略考虑,我国从 2010 年先后推出了 SM ...

  8. 基于mbedTLS算法库实现国密SM2签名和验签算法

    网上有大量的基于OpenSSL实现的国密算法库,比如著名的GmSSL,可以直接拿来用.我自己常用的是mbedTLS的算法库,比较小巧简单,在mbedTLS的大数算法的基础上实现了国密SM2的签名和验签 ...

  9. 国家医保移动支付国密算法SM2签名验签、SM4加解密DLL

    国家医保移动支付国密算法SM2签名验签.SM4加解密DLL 支持医保移动支付(国家统一版), 已知省份有广西.贵州.安徽.河北.黑龙江.湖南.吉林.江苏.四川.新疆等各地方. DLL,非.net开发, ...

  10. Java方法签名格式

    1. 格式 Java的方法签名格式: modifiers type name (paramlist) [ throws exceptions ] 2. 相关说明 2.1 modifiers 零个或多个 ...

最新文章

  1. 支付宝发布黑科技“如影计划”,这真的不是愚人节的玩笑
  2. 2019.6.18 校内测试 分析+题解
  3. python根据表格数据生成折线图_Python交互图表可视化Bokeh:4. 折线图| 面积图
  4. MySQL 添加列,修改列,删除列 的SQL写法
  5. asp 可否压缩_怎样用ASP压缩文件
  6. 基因表达热图聚类并增加行列注释
  7. 探索高效jQuery的奥秘
  8. 容易被忽略的label标签
  9. pip 20.3 发布:更改默认依赖解析器、即将停止支持 Python 2.7
  10. GDI+入门——带你走进Windows图形的世界
  11. 判断是否是完全二叉树和是否为满二叉树
  12. seata 使用oracle_使用Seata彻底解决Spring Cloud中的分布式事务问题!
  13. r语言html帮助是什么东西,R语言帮助的使用
  14. 综合能源管理服务认证是什么 , 综合能源服务认证有什么要求?
  15. STRIX z490i 10700k Monterey12.3黑苹果EFI分享
  16. 简述自动化测试实习收获
  17. 固定表头和第一列、内容可滚动的table表格
  18. 用python实现时间序列白噪声检验
  19. Win10杀毒软件大PK:Defender垫底 卡巴/小红伞第一
  20. supervisor> restart bili:create_bili_index bili:create_bili_index: ERROR (not running) bili:create_b

热门文章

  1. 天地图 + geojson 绘制中国行政区划
  2. 常见排序算法的时间复杂度汇总
  3. 把html转换成word,怎么把html转换成word
  4. 常用编程语言简介大全
  5. ubuntu下如何对接斗鱼直播
  6. Python3.WRF的投影转换
  7. efi文件错误服务器崩溃,电脑故障分析:Winload.efi文件丢失导致蓝屏的解决方法...
  8. c# 多线程单例模式_线程安全C#单例模式
  9. 天线巴伦制作和原理_一种宽带集成巴伦及天线单元的制作方法
  10. 25行代码实现定时自动发送微信消息!