我正在尝试连接到一个api,该api使用过时的hmac哈希身份验证机制。
例如:
$signature = hash_hmac('sha256', $string_to_sign, $api_sec);
与Go中生成的版本相比:
h := hmac.New(sha256.New, []byte(authSecret)) h.Write([]byte(stringToSign)) signature := hex.EncodeToString(h.Sum(nil))
当我使用相同的 stringToSign($string_to_sign) 同样 authSecret($api_sec) 使用go生成的签名将导致api的签名无效。但如果我用php函数创建了相同的函数,它就可以正常工作。我有点不知所措。
stringToSign($string_to_sign)
authSecret($api_sec)
输入数据一定有问题。
使用以下php:
echo hash_hmac('sha256', 'data', 'key');
下面是:
h := hmac.New(sha256.New, []byte("key")) h.Write([]byte("data")) signature := hex.EncodeToString(h.Sum(nil)) fmt.Println(signature)
我得到了同样的结果 5031fe3d989c6d1537a013fa6e739da23463fdaec3b70137d828e36ace221bd0
5031fe3d989c6d1537a013fa6e739da23463fdaec3b70137d828e36ace221bd0