Golang Gitee Webhook 签名验证

Gitee WebHook 提供WebHook 密钥验证和验证算法,原文地址

  1. 把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名。

  2. 对上述得到的结果进行 Base64 encode。

  3. 对上述得到的结果进行 urlEncode,得到最终的签名(需要使用UTF-8字符集)。

  4. 由于网上参考别人的代码都是抄袭。而且还转了16进制,踩了半天的坑。hex.EncodeToString()转成16进制的字符串哦,出来结果不一致哦。

  5. 还有Go里面使用的是PathEscape这个方法,而QueryEscape出来结果不一致。

  6. 另外,Python3 中urllib.quote_plus出来的结果也不一致。

  7. Python3和Golang中,只需要base64加密后就可以验证了。

  8. 其余情况未遇到。

参考代码,请自行修改。

func GiteeSign(secret string, timestamp int64) string {
stringToSign := fmt.Sprintf("%d\n%s", timestamp, secret)
byteStringToSign := []byte(stringToSign)
b64 := base64.StdEncoding.EncodeToString(HmacSha256Sign([]byte(secret), byteStringToSign))
return url.PathEscape(b64)
}
func HmacSha256Sign(secret, msg []byte) []byte {
h := hmac.New(sha256.New, []byte(secret))
h.Write(msg)
return h.Sum(nil)
}
posted @   咕咚!  阅读(275)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2018-07-11 logging模块
点击右上角即可分享
微信分享提示