Go by Example: SHA256 Hashes

SHA256 ハッシュ は、 バイナリやテキストのかたまりに対して短い ID を計算するのによく使われます。 例えば、TLS/SSL 証明書は、SHA256 を使用して証明書の署名を計算します。 以下は、Go で SHA256 ハッシュを計算する方法です。

package main

Go は、crypto/* パッケージで 複数のハッシュ関数を実装しています。

import (
    "crypto/sha256"
    "fmt"
)
func main() {
    s := "sha256 this string"

ハッシュの生成から始めます。

    h := sha256.New()

Write はバイト列を受け取ります。文字列 s がある場合は、 []byte(s) を使って強制的にバイト列にします。

    h.Write([]byte(s))

バイト型のスライスとして最終的なハッシュ値を取得します。 Sum への引数は、既存のバイト型スライスへハッシュ値を 追記したい場合に使えますが、通常は必要ありません。

    bs := h.Sum(nil)
    fmt.Println(s)
    fmt.Printf("%x\n", bs)
}

プログラムを実行すると、ハッシュが計算され、 人間が読める 16 進フォーマットで表示されます。

$ go run sha256-hashes.go
sha256 this string
1af1dfa857bf1d8814fe1af8983c18080019922e557f15a8a...

先に説明したのと同様のパターンを使って、他のハッシュも計算できます。 例えば、SHA512 ハッシュを計算するには、crypto/sha512 をインポートして sha512.New() を使います。

暗号論的に安全なハッシュが必要な場合には、 ハッシュの強度 を注意深く調査すべきという点に注意してください!

Next example: Base64 Encoding.