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
}
他のハッシュライブラリも、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
}