go-密码加密
使用官方提供的 golang.org/x/crypto/bcrypt
包加密。
golang/crypto: [mirror] Go 补充密码学库 (github.com)
bcrypt package - golang.org/x/crypto/bcrypt - Go Packages
bcrypt
是使用hash
算法;是不可逆操作,也就是说不可能反向计算出明文。
bcrypt
在生成密文时会添加一个随机串进行加盐;所以使用 bcrypt
加密时,每次计算出的密文都是不一样的。
package utils
import (
"fmt"
"golang.org/x/crypto/bcrypt"
)
// hash 加密用户密码
func HashPwd(s string) string {
b, err := bcrypt.GenerateFromPassword([]byte(s), bcrypt.DefaultCost)
if err != nil {
fmt.Printf("加密用户密码错误:%s\n", err.Error())
}
return string(b)
}
// 验证密码
func VerifyPwd(pwd, pwdHash string) bool {
err := bcrypt.CompareHashAndPassword([]byte(pwdHash), []byte(pwd))
if err != nil {
// fmt.Println(err, "\n", err == bcrypt.ErrMismatchedHashAndPassword) // true
return false
}
return true
}