Go言語でHMACを利用する方法
Go言語でのHMAC(Hash-based Message Authentication Code)の使用方法について紹介します。godoc.orgのHMACの説明(https://godoc.org/crypto/hmac)を参考にしています。
HMACを使用してハッシュ化した値を返す
func demoHmac(msg, key string) string {
h := hmac.New(sha256.New, []byte(key))
h.Write([]byte(msg))
return hex.EncodeToString(h.Sum(nil))
}
Hmacを使用してハッシュ化したいメッセージを第1引数, シークレットキーを第2引数としたファンクションを作成しています。
ファンクション内について、順を追って解説します。
1行目では、まずshar256と第2引数として得られたkeyを利用してハッシュを作成しています。hmac.New()ではハッシュ(Hash interface)が返ります。また、keyは利用する前にバイトスライス[]byte()にコンバートしている点に注意してください。
2行目で作成したハッシュにメッセージを追加(Write)します。ここでmsgもstringからバイトスライスにコンバートする必要があります。
3行目でハッシュhにnilを足してhexにエンコードしたものをreturn しています。
HMAC別の書き方
func demoHmac2(msg, key string) string {
h := hmac.New(sha256.New, []byte(key))
io.WriteString(h, msg)
return fmt.Sprintf("%x", h.Sum(nil))
}
ファンクション内、2行目と3行目が違いますが、やっていることは同じです。
io.WriteStringの中ではタイプを判定した後、必要に応じて型変換を行っています。
<io.go抜粋>
// WriteString writes the contents of the string s to w, which accepts a slice of bytes.
// If w implements StringWriter, its WriteString method is invoked directly.
// Otherwise, w.Write is called exactly once.
func WriteString(w Writer, s string) (n int, err error) {
if sw, ok := w.(StringWriter); ok {
return sw.WriteString(s)
}
return w.Write([]byte(s))
}
詳しく知りたい方へ :
Golang 公式サイト
ディスカッション
コメント一覧
まだ、コメントがありません