HMACについて考えることにした。言葉は知っている。どんな時に使用されるも のかも何となくわかる。どんなライブラリを使えば、結果を得られるのかもわ かる。でも、どうやったらそれを計算できるのかを知らない。

考えれば、そういう勉強を今までたくさん省略してきた。省略したほうが、効 率良く学べるからだ。何かを作る時、アルゴリズムを知らなくても、アルゴリ ズムを実装したライブラリとその使い方さえ知っていれば、サービスやアプリ ケーションは実装可能だ。だから、そのものを学ぶのではなく、ライブラリと その使い方を学んできた。ただライブラリや、実装されたものの使い方という ものは不変的なものではない。いつまでたっても未熟なプログラマーのままだ。 だから、なるべく不変性の高いものの仕組みについて学んでいきたいと思う。

今回はHMACを使用する機会があったから、それについて考えることにした。

https://www.ipa.go.jp/security/rfc/RFC2104JA.html

Golang

package main

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

func main() {
	hmacObj := hmac.New(sha256.New, []byte(""))
	hmacObj.Write([]byte(``))
	d := hmacObj.Sum(nil)
	h := hex.EncodeToString(d)
	fmt.Println(h)
}

Emacs Lisp

https://github.com/grimnebulin/emacs-hmac

(hmac 'sha256 "key" "data string")