PHP和Go中的hmac哈希不一样

我正在尝试生成一个用于 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=


我在这里有点迷路,已经花了很多时间来解决这个问题,请帮忙。


翻过高山走不出你
浏览 213回答 2
2回答

白衣染霜花

你可以试试这个功能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

php代码base64_encode(hash_hmac('sha256', $data, $secret));我在golang和php上测试成功。结果是一样的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go