4.1 介绍
在Go语言中,可以使用bcrypt库来对密码进行安全加密,号称最安全的加密算法。
4.2 优点:
-
不需要你自己去生成盐值。
-
不需要额外存储盐值。
-
可以通过控制
cost
来控制加密性能。 -
同样的文本,加密后的结果不同。
4.3 使用
首先,你需要在Go中安装bcrypt库:
go get golang.org/x/crypto/bcrypt
下面是一个使用bcrypt库在对用户密码进行加密的示例:
package main
import (
"fmt"
"golang.org/x/crypto/bcrypt"
)
func main() {
// 用户注册时使用的密码
password := "user_password"
// 使用bcrypt库对密码进行哈希处理
hashedPassword, err := hashPassword(password)
if err != nil {
fmt.Println("Error hashing password:", err)
return
}
fmt.Println("Original Password:", password)
fmt.Println("Hashed Password:", hashedPassword)
// 模拟用户登录时的密码验证
err = comparePasswords(hashedPassword, "wrong_password")
if err != nil {
fmt.Println("Password does not match:", err)
} else {
fmt.Println("Password matches!")
}
err = comparePasswords(hashedPassword, "user_password")
if err != nil {
fmt.Println("Password does not match:", err)
} else {
fmt.Println("Password matches!")
}
}
func hashPassword(password string) (string, error) {
// 使用bcrypt库的GenerateFromPassword函数进行哈希处理
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
return "", err
}
return string(hashedPassword), nil
}
func comparePasswords(hashedPassword, inputPassword string) error {
// 使用bcrypt库的CompareHashAndPassword函数比较密码
err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(inputPassword))
return err
}
加密后的结果如下: