亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號