Code Monkey home page Code Monkey logo

Comments (7)

ZZMarquis avatar ZZMarquis commented on July 17, 2024

这个项目里sm2.Sign出来是DER编码的签名。看招商的报错,它应该是不要DER编码的,而是要r和s拼起来的纯字节数组,r、s转成字节数组后应该是各32字节共64字节。
你需要调用sm2.SignToRS这个方法,得到r和s两个大数,然后把这两个大数转成32字节,拼在一起。

from gm.

guihai avatar guihai commented on July 17, 2024

您好,感谢您的答复。根据您的建议改成以下代码
`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.

hyfree avatar hyfree commented on July 17, 2024

1、请给一个符合招行规范的签名示例数据
2、可以检查一下userid、R&S签名前面是否需要补位00

from gm.

guihai avatar guihai commented on July 17, 2024

1、请给一个符合招行规范的签名示例数据 2、可以检查一下userid、R&S签名前面是否需要补位00

用户id 已经补位了
ID16 := "N002462434000000"
私钥
key := "NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E="
这是招行工具生成的签名
mu := "tOJyCP3sVfARxqx42d8tSKwpf/OCueEaaFojcR/msfarSwkfXQoHmtbjqdf/xixqc7ay+rrRuALXnjRVJo/uwQ=="

from gm.

ZZMarquis avatar ZZMarquis commented on July 17, 2024

如果需要补零就要看r和s生成的字节数组的第一个字节的第一个比特是否是1,如果是1则需要在前面补一个0字节,也就是r和s都有可能是32或33字节,拼接后可能是64、65或66字节。但是一般要纯字节数组都不会要求补零的。

from gm.

Guanzi233 avatar Guanzi233 commented on July 17, 2024

我目前也在写这个,可以分享一下你的写法吗?

from gm.

tanjl855 avatar tanjl855 commented on July 17, 2024

请问问题怎么解决的呢?我也是走到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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.