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

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

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

2年前 评论
deatil (楼主) 2年前
deatil (楼主) 2年前
小学毕业生 (作者) 2年前
deatil (楼主) 2年前
小学毕业生 (作者) 2年前
deatil (楼主) 2年前
小学毕业生 (作者) 2年前
deatil (楼主) 2年前
Lichmaker 2年前

楼主,请问下招行公钥怎么验签呢?给出的是字符出和上述的sm2signdata 一样长度,我使用sm2signdata可以解析成公钥的结构体,用招行的公钥就不行,编码格式是否需要转换下

2个月前 评论
deatil (楼主) 2个月前

@LightJY 使用公钥明文可以这样

//  sm2  验证【招商银行】
// 使用公钥明文验证
  sm2signdata  :=  "CDAYcxm3jM+65XKtFNii0tKrTmEbfNdR/Q/BtuQFzm5+luEf2nAhkjYTS2ygPjodpuAkarsNqjIhCZ6+xD4WKA=="
  sm2Very  :=  sm2.New().
      FromBase64String(sm2signdata).

  FromPublicKeyBytes(sm2pubkeyBytes).
      SetUID(sm2userid).
      VerifyBytes([]byte(sm2data)).
      ToVeryed()
2个月前 评论

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