我正在嘗試生成一個用于 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 關注
- 207 瀏覽
添加回答
舉報
0/150
提交
取消
