使用Go与node.js或Python不同的结果签名的Hmac / sha1消息

时间:2016-07-14 18:05:25

标签: go hmac hmacsha1

我正在尝试使用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()

你能帮我弄清楚我做错了吗?

谢谢!

1 个答案:

答案 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')
);