go 国密招商银行对接
最近看到【招商银行】关于php版本的签名和验证
最近也在整理go相关的签名验证及加密解密,所以也完成了一份go对应的签名验证
招商银行的签名验证主要是使用国密sm2作为签名验证,同时对生成的的签名数据r,s做了16进制转换的特殊处理,所以默认的sm2生成的验证数据会有问题
以下是go版本的招商银行签名验证
下载安装包
go get -u github.com/deatil/go-cryptobin
签名验证使用
package main import ( "fmt" "encoding/base64" cryptobin_sm2 "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 := cryptobin_sm2.NewSM2(). FromPrivateKeyBytes(sm2keyBytes). FromString(sm2data). SignHex([]byte(sm2userid)). ToBase64String() // sm2 验证【招商银行】 sm2signdata := "CDAYcxm3jM+65XKtFNii0tKrTmEbfNdR/Q/BtuQFzm5+luEf2nAhkjYTS2ygPjodpuAkarsNqjIhCZ6+xD4WKA==" sm2Very := cryptobin_sm2.NewSM2(). FromBase64String(sm2signdata). FromPrivateKeyBytes(sm2keyBytes). MakePublicKey(). VerifyHex([]byte(sm2data), []byte(sm2userid)). ToVeryed() fmt.Println("签名结果:", sm2Sign) fmt.Println("验证结果:", sm2Very) }
更多的签名验证及加密解密可以查看 go-cryptobin
推荐文章: