lpilp / phpsm2sm3sm4

php版本,支持国密SM2的签名算法,非对称加解密,SM3的hash, SM4的对称加解密
320 stars 74 forks source link

用RtSm2报错:ASN.1 Parser Exception at offset 4: Integer not minimally encoded #23

Closed jiaoshengkang closed 2 years ago

jiaoshengkang commented 2 years ago
     * 银行回复:
     * 支付回调中的签名的编码
     * 支付回调的签名的 ASN.1 编码中的 integer 编码没有省略开头多余的 0 字节
     * 比如:MEYCIQDWveKrtx6VrosnYQHNBnRjolrlmi/mHwMWKU4bDxakQwIhAH0l9tLPgotUrxUAYMfpETFN2dcWx7U9JKWXwF1R/KaH
     * 其中的正整数编码: 02 21 00 7D...., 00 7D 前9位全是0,其中的 00 字节应该被省略
lpilp commented 2 years ago

你是指这边的函数进行签名后没有去掉多余的0, asn1的函数这边调用的的是第三方的 phpasn1组件,我看下是哪里出了问题

lpilp commented 2 years ago

ASN.1 Parser Exception at offset 4: Integer not minimally encoded , 这个报错应该是这边的PHP报的错吧, 就是说是对方给的签名报的错, 你对接的是招行吧,他们家返回的签名,无论是否要补0,都补0了,这个无解,不按asn1的标准,有人问过这个问题,解决方案1,签名只有r,s两个参数,自己取出来,重新asn1过滤下,然后带入函数,方案2 就是把这个错误注释忽略了,网上碰到的几位童鞋都是这样,把这个错误忽略了,

lpilp commented 2 years ago

更新了一下,你看我的readme文末的最后一行,加了一个过滤的类,有需要可在签的时候过滤下00,就可以验了

jiaoshengkang commented 2 years ago

好的,太感谢你了~