go建行支付异步通知验签处理

关于建行支付的异步通知验签处理

找了很多大佬的文章没看到golang详细的建行支付异步通知得了例子,这里将用go进行示例。

建行给的公钥是16进制公钥,如果拿来使用记得转换成一下。同样的还有sign签名串

func HexToString(hexStr string) string {
   hexBytes, err := hex.DecodeString(hexStr)
   if err != nil {
   	return ""
   }

   return string(hexBytes)
}

代码如下:

func RsaVerifySignWithMd5(originalData, sign, pubKey string) error {

   pubKey = Base64URLDecode(pubKey)
   fmt.Println("pubKey", pubKey)
   public, err := base64.StdEncoding.DecodeString(pubKey)
   if err != nil {
   	fmt.Println("DecodeString")
   	return err
   }
   pub, err := x509.ParsePKIXPublicKey(public)
   if err != nil {
   	fmt.Println("ParsePKIXPublicKey", err)
   	return err
   }
   hash := md5.New()
   hash.Write([]byte(originalData))
   return rsa.VerifyPKCS1v15(pub.(*rsa.PublicKey), crypto.MD5, hash.Sum(nil), []byte(sign))
}

func Base64URLDecode(data string) string {
   var missing = (4 - len(data)%4) % 4
   data += strings.Repeat("=", missing) //字符串长度不足4倍的位补"="
   data = strings.Replace(data, "_", "/", -1)
   data = strings.Replace(data, "-", "+", -1)
   return data
}
func main() {
   publicKey := "你的16进制小写公钥"
   pub := HexToString(publicKey)
   message := "你的验签串(记得将所有非sign参数按照正确的顺序排列)"
   //
   signature := "你的16进制小写签名串"
   //
   sig := HexToString(signature)
   err := RsaVerifySignWithMd5(message, sig, pub)
   fmt.Println(err)
   if err != nil {
   	fmt.Println("Signature verification failed:", err)
   } else {
   	fmt.Println("Signature verified successfully.")
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值