2016-07-14 10 views
-1

Я пытаюсь сгенерировать сигнатуру Hmac/SHA1 с помощью Go, но у меня разные результаты, чем при тестировании с помощью Node.js или Python.Подписанное сообщение 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

Я получаю идентичные результаты в 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') 
);