我认真学习了Go语言-密码哈希化
首先
你好。我是一名正在某学校学习编程等内容的服务器端程序员。
现在,我将介绍在使用golang实现登录功能时,如何进行密码哈希化的方法作为新年的第一篇文章。
准备好
您可以使用 golang.org/x/crypto/bcrypt 来安全地生成和验证密码哈希。
请首先切换到$GOPATH,然后运行以下命令。
go get golang.org/x/crypto/bcrypt
将要在DB等处注册的密码进行哈希处理
import "golang.org/x/crypto/bcrypt"
func main() {
hash, err := passwordHash("登録用パスワード")
if err != nil {
panic(err)
}
println(hash)
}
// パスワードハッシュを作る関数
func passwordHash(pw string) (string, error) {
hash, err := bcrypt.GenerateFromPassword([]byte(pw), bcrypt.DefaultCost)
if err != nil {
return "", err
}
return string(hash), err
}
由于GenerateFromPassword需要一个[]byte类型的参数,所以需要将从表单等输入的密码转换为[]byte类型。
由于返回值也是[]byte类型,所以在保存到DB等情况下需要将其转换为string类型。
检查已注册的密码哈希是否与输入的密码匹配。
import "golang.org/x/crypto/bcrypt"
func main() {
// hashはDBなどからとってくる
err := passwordVerify(hash, "入力されたパスワード")
if err != nil {
panic(err)
}
println("認証しました")
}
// 登録したパスワードハッシュが入力パスワードにマッチするかどうかを調べる関数
func passwordVerify(hash, pw string) error {
return bcrypt.CompareHashAndPassword([]byte(hash), []byte(pw))
}
由于`CompareHashAndPassword`需要传入`[]byte`类型,因此需要进行类型转换。
如果有任何错误或建议,请随时与我联系。感谢您阅读到最后。