我正在尝试生成一个用于 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))
}
FFIVE
TA贡献1797条经验 获得超6个赞
php代码
base64_encode(hash_hmac('sha256', $data, $secret));我在golang和php上测试成功。结果是一样的。
- 2 回答
- 0 关注
- 212 浏览
添加回答
举报
0/150
提交
取消
