为了账号安全,请及时绑定邮箱和手机立即绑定

PHP和Go中的hmac哈希不一样

PHP和Go中的hmac哈希不一样

Go
翻过高山走不出你 2022-06-13 16:47:43
我正在尝试生成一个用于 API 身份验证的 hmac,但文档在 Go 上,我需要将其转换为 php 方式,我需要结果与 Go 结果相同。在文档上说:要构建要签名的字符串,请将 HTTP 方法、请求内容类型、日期时间、请求 URI 和有效负载哈希与每个参数之间的换行符结合起来。走开:func ComputeHMAC(date string) string   request := []string{"POST","application/json",'Thu, 17 Jan 2019 02:45:06               GMT',"/ayden/init",'qz0HpayQzMDnBfJMfUB5zJGU62nX2Uef66m6YIpDAWA='}   request1 := strings.Join(request, "\n")   request2 := []string{request1,"\n"}   stringToSign := strings.Join(request2, "")   shaSignature := computeHmac256(stringToSign, "secret")}func computeHmac256(message string, secret string) string {   key := []byte(secret)      h := hmac.New(sha256.New, key)   h.Write([]byte(message))   result := h.Sum(nil)   return base64.StdEncoding.EncodeToString(result) }GO 中的 Hmac:6k44vpeNqYSgFkM2sZsJH+Ijg5amftPnqO3v45pMWN0=我在 PHP 中尝试过的内容:$stringToSign = [        'POST',        'application/json',        'Thu, 17 Jan 2019 02:45:06 GMT',        '/ayden/init',        'qz0HpayQzMDnBfJMfUB5zJGU62nX2Uef66m6YIpDAWA='    ];$string = implode("/n", $stringToSign);$hmac = base64_encode(hash_hmac('sha256', $string, 'secret', true)); echo $hmac;PHP 中的 Hmac:9mt4Ojzr9uVGaB6/jt96bbuEd0gJNh6Cph3q+dY3X38=我在这里有点迷路,已经花了很多时间来解决这个问题,请帮忙。
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

你可以试试这个功能


func computeHmac256(src string, secret string) string {

    h := hmac.New(sha256.New, []byte(secret))

    h.Write([]byte(src))

    shaStr:= fmt.Sprintf("%x",h.Sum(nil))

    return base64.StdEncoding.EncodeToString([]byte(shaStr))

}


查看完整回答
反对 回复 2022-06-13
?
FFIVE

TA贡献1797条经验 获得超6个赞

php代码

base64_encode(hash_hmac('sha256', $data, $secret));

我在golang和php上测试成功。结果是一样的。


查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号