go で暗号化:bcrypt でパスワードのハッシュ化と検証
はじめに
go の暗号化処理についてまとめます。
今回は golang.org/x/crypto/bcrypt
でパスワードのハッシュ化と検証を行います。
golang.org/x/crypto/bcrypt
golang.org/x/crypto/bcrypt
は高級なインターフェースを備えているので短く書けます。
CompareHashAndPassword
は73文字目以降は無視されてしまうようなのでバリデーションを入れたほうが良さそうです。
package main import ( "fmt" "golang.org/x/crypto/bcrypt" ) // ハッシュ化 func hash(s string) (string, error) { hash, err := bcrypt.GenerateFromPassword([]byte(s), bcrypt.DefaultCost) if err != nil { return "", err } return string(hash), err } // 検証 func verify(hash, s string) error { return bcrypt.CompareHashAndPassword([]byte(hash), []byte(s)) } func main() { hash, err := hash("password123") if err != nil { fmt.Println(err) } fmt.Println("hash: ", hash) // TODO: check password length less than 72 err = verify(hash, "password123") // valid case // err = verify(hash, "password1234") // invalid case if err != nil { fmt.Println("err: ", err) } else { fmt.Println("ok!") } }
まとめ
bcrypt でパスワードのハッシュ化と検証の方法をまとめました。