馆陶做网站,容桂低价网站建设,成都网址建设,网上免费logo设计最近一个项目客户端是使用c写的#xff0c;后端是java写的#xff0c;两端通信报文加解密和签名都使用的SM2算法#xff0c;直到有一天#xff0c;后台交易成功了#xff0c;但是客户端验签失败了#xff0c;导致第三方从客户端拿到的验签失败报文#xff0c;认为交易失…最近一个项目客户端是使用c写的后端是java写的两端通信报文加解密和签名都使用的SM2算法直到有一天后台交易成功了但是客户端验签失败了导致第三方从客户端拿到的验签失败报文认为交易失败。 因为交易一直正常这是一个偶发性的失败交易但是生产环境无小事不错过任何一个错误就开始处理拿到的的签名数据如下一条验签成功、一条验签失败的
#验签成功的
304402201565F15B99499AB72650045445834DB5D71B31C39F5B9D5ABEFA81B1C03D6EF7022009AEA386A134130E3FA4B7A082424D0495E631C44F7790705D8F74118A0D4EB9
#验签失败的
3044021f03e73355393992dfe05739866e1528fe8d0477d05b2a3589fcb75301336377022100e7212753fafb33dce1e0c74af3017e1c50b1e665820feec64b64a5f8edec2ddd根据R、S签名值进行分解如下
#验签成功的
30
44
0220
1565F15B99499AB72650045445834DB5D71B31C39F5B9D5ABEFA81B1C03D6EF7
0220
09AEA386A134130E3FA4B7A082424D0495E631C44F7790705D8F74118A0D4EB9#验签失败的
30
44
021f
03e73355393992dfe05739866e1528fe8d0477d05b2a3589fcb75301336377
0221
00e7212753fafb33dce1e0c74af3017e1c50b1e665820feec64b64a5f8edec2ddd从上面可以看出验签失败的签名中R部分长度只有1f字节十进制31个字节正常应该有32字节所以导致在客户端验签失败因为客户端是按照标准的32字节去处理的。 经查阅资料是因为R部分的签名删除了前导00删除的规则是基于签名部分第一个字节是不是1开头如果是1开头需要添加00否则可以删除前导00所以我们给客户端的时候需要在业务层进行补00即可。 参考资料 https://blog.csdn.net/softt/article/details/134941449 https://blog.csdn.net/baikeley74/article/details/129703735