2016-09-10 4 views
1

Suis nouveau pour aller la langue, j'ai besoin de créer un Hmac en langue go. J'ai créé un Hmac dans nodejs, besoin de générer le même Hamc en langue go. Essayé le code suivant mais obtenant exactement la sortie différente. Je ne sais pas ce que je fais mal. C'est ce que j'ai essayéGo lang générer hmac

package main 

import (
    "crypto/hmac" 
    "crypto/sha256" 
    "encoding/base64" 
    "fmt" 
) 

func ComputeHmac256(message string, secret string) string { 
    key := []byte(secret) 
    h := hmac.New(sha256.New, key) 
    h.Write([]byte(message)) 
    return base64.StdEncoding.EncodeToString(h.Sum(nil)) 
} 

func main() { 
    fmt.Println(ComputeHmac256("sms1", "b5fb5b3a65b8429693c3a029308e2e46")) 
} 
Output: JVN7kUPFL0aQ09lIH4YOsFJA3A2faqTuu6zIaYo61VI= 

Besoin d'aller équivalent suivant code nodejs

var crypto = require('crypto'), 
    text = 'sms1', 
    key = 'b5fb5b3a65b8429693c3a029308e2e46' 
var hash = crypto.createHmac('sha256', key) 
hash.update(text) 
var value = hash.digest('hex') 
// Output 
25537b9143c52f4690d3d9481f860eb05240dc0d9f6aa4eebbacc8698a3ad552 

Répondre

8

Vous devez utiliser le même encodage dans votre programme Go comme vous le faites dans votre programme Node.js (hex):

package main 

import (
    "crypto/hmac" 
    "crypto/sha256" 
    "encoding/hex" 
    "fmt" 
) 

func ComputeHmac256(message string, secret string) string { 
    key := []byte(secret) 
    h := hmac.New(sha256.New, key) 
    h.Write([]byte(message)) 
    return hex.EncodeToString(h.Sum(nil)) 
} 

func main() { 
    fmt.Println(ComputeHmac256("sms1", "b5fb5b3a65b8429693c3a029308e2e46")) 
} 

https://play.golang.org/p/-1yePFeipT

+0

Merci beaucoup @Tim. Votre réponse m'a vraiment aidé. – Dibish

+0

Si je veux écrire plus de données dans hmac, Puis-je utiliser h.Write() plusieurs fois? ou dois-je le réinitialiser avant d'écrire la valeur suivante? –