go 国密招商银行对接
最近看到【招商银行】关于php版本的签名和验证
最近也在整理go相关的签名验证及加密解密,所以也完成了一份go对应的签名验证
招商银行的签名验证主要是使用国密sm2作为签名验证,同时对生成的的签名数据r,s做了16进制转换的特殊处理,所以默认的sm2生成的验证数据会有问题
以下是go版本的招商银行签名验证, 适配为最新版本
下载安装包
go get -u github.com/deatil/go-cryptobin
签名验证使用
package main import ( "fmt" "encoding/base64" "github.com/deatil/go-cryptobin/cryptobin/sm2" ) func main() { // sm2 签名【招商银行】 sm2key := "NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=" sm2keyBytes, _ := base64.StdEncoding.DecodeString(sm2key) sm2data := `{"request":{"body":{"TEST":"中文","TEST2":"!@#$%^&*()","TEST3":12345,"TEST4":[{"arrItem1":"qaz","arrItem2":123,"arrItem3":true,"arrItem4":"中文"}],"buscod":"N02030"},"head":{"funcode":"DCLISMOD","userid":"N003261207"}},"signature":{"sigdat":"__signature_sigdat__"}}` sm2userid := "N0033511370000000000000000" sm2userid = sm2userid[0:16] sm2Sign := sm2.New(). FromPrivateKeyBytes(sm2keyBytes). FromString(sm2data). SetUID(sm2userid). SignBytes(). ToBase64String() // sm2 验证【招商银行】 sm2signdata := "CDAYcxm3jM+65XKtFNii0tKrTmEbfNdR/Q/BtuQFzm5+luEf2nAhkjYTS2ygPjodpuAkarsNqjIhCZ6+xD4WKA==" sm2Very := sm2.New(). FromBase64String(sm2signdata). FromPrivateKeyBytes(sm2keyBytes). MakePublicKey(). SetUID(sm2userid). VerifyBytes([]byte(sm2data)). ToVeryed() fmt.Println("签名结果:", sm2Sign) fmt.Println("验证结果:", sm2Very) }
更多的签名验证及加密解密可以查看 go-cryptobin
楼主,这些接口文档在哪?
楼主,请问下招行公钥怎么验签呢?给出的是字符出和上述的sm2signdata 一样长度,我使用sm2signdata可以解析成公钥的结构体,用招行的公钥就不行,编码格式是否需要转换下
@LightJY 使用公钥明文可以这样