Comments (7)
这个项目里sm2.Sign出来是DER编码的签名。看招商的报错,它应该是不要DER编码的,而是要r和s拼起来的纯字节数组,r、s转成字节数组后应该是各32字节共64字节。
你需要调用sm2.SignToRS这个方法,得到r和s两个大数,然后把这两个大数转成32字节,拼在一起。
from gm.
您好,感谢您的答复。根据您的建议改成以下代码
`func (s *SM4) Sm2SignWithSm3RS(priKey, uid, data string) (string, error) {
//获取私钥
// 解码hex私钥
//keyByte, err := hex.DecodeString(priKey)
//if err != nil {
// return "1", err
//}
keyByte, err := base64.StdEncoding.DecodeString(priKey)
if err != nil {
return "11", err
}
// 转成go版的私钥
pri, err := sm2.RawBytesToPrivateKey(keyByte)
if err != nil {
return "2", err
}
// 携带uid 的sign
ri, si, err := sm2.SignToRS(pri, []byte(uid), []byte(data))
if err != nil {
return "3", err
}
rb := ri.Bytes()
//fmt.Println("** lenrb: ", len(rb))
sb := si.Bytes()
//fmt.Println("** lensb: ", len(sb))
rs := append(rb, sb...)
//fmt.Println("** len rs: ", len(rs))
return base64.StdEncoding.EncodeToString(rs), nil
}`
生成的签名长度 88 ,符合标准长度了。 但是招行依然报错;
报错信息:签名校验失败[Failed to
verify data using SM2 public key. case by : It’s just a failure to check, not an exception.]
是不是我到 r,s 拼接错误
from gm.
1、请给一个符合招行规范的签名示例数据
2、可以检查一下userid、R&S签名前面是否需要补位00
from gm.
1、请给一个符合招行规范的签名示例数据 2、可以检查一下userid、R&S签名前面是否需要补位00
用户id 已经补位了
ID16 := "N002462434000000"
私钥
key := "NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E="
这是招行工具生成的签名
mu := "tOJyCP3sVfARxqx42d8tSKwpf/OCueEaaFojcR/msfarSwkfXQoHmtbjqdf/xixqc7ay+rrRuALXnjRVJo/uwQ=="
from gm.
如果需要补零就要看r和s生成的字节数组的第一个字节的第一个比特是否是1,如果是1则需要在前面补一个0字节,也就是r和s都有可能是32或33字节,拼接后可能是64、65或66字节。但是一般要纯字节数组都不会要求补零的。
from gm.
我目前也在写这个,可以分享一下你的写法吗?
from gm.
请问问题怎么解决的呢?我也是走到append,返回ErrMsg:DCKY005-签名校验失败[Failed to verify data using SM2 public key. case by : It’s just a failure to check, not an exception.][测试]
from gm.
Related Issues (17)
- 函数notEncrypted中的bug HOT 1
- x509转成publice key HOT 1
- sm2 Decrypt HOT 1
- 问题 关于公钥的 X, Y 如何生成 pem文件的字符串 HOT 3
- sm2签名在gmssl服务端验证失败 HOT 2
- 建议 HOT 1
- 针对sm2.Verify的cpu性能问题,有提升方案吗 HOT 3
- 能否加一个zeroPadding,不知道咋写 HOT 3
- Public key raw bytes length must be 64 HOT 7
- 为什么会出现 data[0] != 4 这个问题 HOT 1
- sign/verify结果输出问题 HOT 1
- sm2验签偶发性失败 HOT 8
- Java端SM2加密,golang无法解密,golang端SM2加密,java无法解密 HOT 1
- sigtopub HOT 6
- SM4加密结果JAVA无法解密 HOT 5
- sm2进行加解密时,建议对公钥的X和Y的[]byte类型进行填充 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gm.