Go 自带的bcrypt库可以进行密码加密与校验

生成密码:

import "golang.org/x/crypto/bcrypt"

// 定义密码强度
const cost int = 10
// 变量`cost`用于定义密码强度,值越大,则密码检验强度越高。

// 生成密码
func GeneratePassword(password string) (string, error) {
    // 加密密码
    hashed, err := bcrypt.GenerateFromPassword([]byte(password), cost)
    if err != nil {
        return "", err
    }
    return string(hashed), nil
}

校验密码:

import "golang.org/x/crypto/bcrypt"

// 校验密码
func CheckPassword(password string, hashedPassword string) bool {
    // 比较密码
    err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password))
    return err == nil
}

在使用bcrypt算法进行密码加密时,cost参数用于指定计算强度,代表着加密的次数。bcrypt算法的工作原理是将明文密码和随机生成的salt混合后,使用 blowfish密码算法进行多次加密。密码校验的过程是将用户输入的明文密码和从数据库中取出的密文(哈希值)中提取出的salt一起参与运算生成新的哈希值,再将新的哈希值与数据库中的哈希值进行比较。如果两者相同,则表明密码校验成功。 cost值的取值范围为4~31,通常取10~14,更高的计算强度会提高密码的安全等级,但同时也会带来更高的 CPU 资源消耗,因此需要根据实际应用场景选择合适的计算强度。