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

我们走了很远的路,终于发现,路已经不止一条
讨论数量: 11

楼主,这些接口文档在哪?

1周前 评论
deatil (楼主) 1周前
deatil (楼主) 1周前
yangjisen (作者) 1周前
deatil (楼主) 1周前
yangjisen (作者) 1周前
deatil (楼主) 1周前
yangjisen (作者) 1周前
deatil (楼主) 1周前
Lichmaker 3天前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!