我正在尝试使用Go生成Hmac / SHA1签名,但是我得到的结果与使用Node.js或Python测试时的结果不同。
这是我在Go中的代码:
signature := hmac.New(sha1.New, []byte(signKey))
signature.Write([]byte(buffer))
return hex.EncodeToString(signature.Sum(nil))
这是我在Node.js中的代码:
return crypto.createHmac('sha1', signKey).update(buffer).digest('hex');
的Python:
return hmac.new(signKey, buffer, sha1).hexdigest()
你能帮我弄清楚我做错了吗?
谢谢!
答案 0 :(得分:2)
我在测试中获得了与Go和Node.js相同的结果。这意味着您的密钥和/或缓冲区必须在Go中不同。
以下是我的测试代码供参考:
转到:
package main
import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
)
func main() {
signKey := "12345"
buffer := []byte{1, 2, 3}
signature := hmac.New(sha1.New, []byte(signKey))
signature.Write([]byte(buffer))
println(hex.EncodeToString(signature.Sum(nil)))
}
Node.js的:
var crypto = require('crypto');
var signKey = "12345";
var buffer = "\x01\x02\x03";
console.log(
crypto.createHmac('sha1', signKey).update("\x01\x02\x03", "binary").digest('hex')
);