Edited at

GolangでSHA-256ハッシュ

More than 3 years have passed since last update.

package main

import (
"fmt"
"crypto/sha256"
"crypto/sha512"
"golang.org/x/crypto/sha3"
"golang.org/x/crypto/ripemd160"
)

func main() {
// http://ja.wikipedia.org/wiki/SHA-2#.E3.83.8F.E3.83.83.E3.82.B7.E3.83.A5.E5.80.A4.E3.81.AE.E4.BE.8B
str := "" // 空の入力に対するハッシュ値

// sha256.Sum256 は、[]byte を必要とする
fmt.Printf("SHA-256 : %x\n", sha256.Sum256([]byte(str)))
// -> e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

// その他、、、
// sha512 の場合
fmt.Printf("SHA-512 : %x\n", sha512.Sum512([]byte(str)))
// -> cf83e1357eefb8bdf1542850d66d8007......

// sha3-256 の場合
fmt.Printf("SHA-3 256 : %x\n", sha3.Sum256([]byte(str)))
// -> a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a

// RIPEMD-160 の場合は、New() で、hash.Hash が返ってくるので、
// Write して Sum する
rip := ripemd160.New()
io.WriteString(rip, str)
fmt.Printf("RIPEMD160 : %x\n", rip.Sum(nil))
// -> 9c1185a5c5e9fc54612808977ee8f548b2258d31
}

投稿当初、下記の実装を紹介していましたが、

go1.2で Sum256, Sum512 のfunctionが追加されていました。便利ですね。

@tienlen さんから頂いたコメントの通りです)

以下は、無視してOKです。

package main

import (
"fmt"
"io"
"crypto/sha256"
)

func main() {
// http://ja.wikipedia.org/wiki/SHA-2#.E3.83.8F.E3.83.83.E3.82.B7.E3.83.A5.E5.80.A4.E3.81.AE.E4.BE.8B
str := "" // 空の入力に対するハッシュ値

// crypto/sha256 は、[]byte を必要とする
s := sha256.New()
s.Write([]byte(str))
fmt.Printf("SHA-256 : %x\n", s.Sum(nil))

// io.WriteString を使う方がキレイかな
s = sha256.New()
io.WriteString(s, str)
fmt.Printf("SHA-256 : %x\n", s.Sum(nil))

// どちらも e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
}

The Go Playground

他のハッシュライブラリも、hash.Hash インタフェースに合わせて実装されているので、

SHA-512 の場合も同じように、crypto/sha512 を使えば良いし、

例えば、RIPEMD-160 とか、SHA-3 のライブラリは、

code.google.com/p/go.crypto

にあるけど、同じように使えます。

package main

import (
"fmt"
"io"
"code.google.com/p/go.crypto/ripemd160"
"code.google.com/p/go.crypto/sha3"
)

func main() {
str := "" // 空の入力に対するハッシュ値
rip := ripemd160.New()
io.WriteString(rip, str)
fmt.Printf("RIPEMD160 : %x\n", rip.Sum(nil))

// 9c1185a5c5e9fc54612808977ee8f548b2258d31

sh3 := sha3.New256()
io.WriteString(sh3, str)
fmt.Printf("SHA-3 256 : %x\n", sh3.Sum(nil))

// a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
}