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
}
