Help us understand the problem. What is going on with this article?

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
}
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away