密码加密
此项目用的是scrypt,可在pkg上查询并引入
加密主要方法为scrypt.Key()此方法返回byte切片,需要我们设置几项数据
- password为要加密的密码或其他数据
- salt为byte切片一般含有八个对象
- 其他参数:N,r,p,KeyLen:
N为CPU/内存成本参数,必须是大于1的2的幂。R和p必须满足R * p <2³⁰。如果参数不满足限制,函数将返回一个nil字节片和一个错误。推荐32768(1<<15)
将函数返回的函数切片转成string类型即完成加密
salt := []byte{0xc8, 0x28, 0xf2, 0x58, 0xa7, 0x6a, 0xad, 0x7b}
dk, err := scrypt.Key([]byte(password), salt, 1<<15, 8, 1, 32)
if err != nil {
fmt.Printf("cryptPW fail%s", err)
return " ", err
}
psd := base64.StdEncoding.EncodeToString(dk)
此项目中将密码加密的方法放在了User结构体的*BeforeSave()*中,即在操作保存数据库之前将密码加密。*BeforeSave()*为钩子函数的一种,更多关于钩子函数请移步:
https://learnku.com/docs/gorm/v2/hooks/9744#b0014f
tips:在之后的密码操作上,直接将密码转为加密再比对即可。如登入时将输入密码再与数据库加密后的用户密码比对。
输入密码再与数据库加密后的用户密码比对。*