常见的增删改查代码就不CV到这来了,都能看懂
加密算法
把密码明文放在数据库里面是一件很蠢的事情,因为这样开发者能轻而易举看到每一个用户的账户信息
呃呃,看不看到对现在的环境有啥影响吗
不过我有老一辈电竞人的骄傲,这点职业操守还是要有的
常见的密码加密方式有:
单向哈希加密:MD5 SHA1等;这种单向加密已经做到能让正常人看不懂密码了,不过固定字符串只能生成唯一对应的哈希字符串,比如123456的md5永远都是e10adc3949ba59abbe56e057f20f883e,有经验的老东西看到e10adc就可以猜猜是不是123456作为密码了加盐:在后端单向哈希过程中添加salt。比如123456在后端处理中随便加上crisp、tomato之类不知所谓的单词,又或者随机生成一段字符串添加进去再进行MD5加密,还能再加一个单词二次加盐,还能三次四次……反正就是后端自己加密加到最后bcrypt:参考这篇论文A Future-Adaptable Password Scheme,反正看不懂,能用这玩意就行。scrypt:反正看不懂论文,能用就行
写个test
// ScryptPwd
// 将密码使用scrypt加密
func ScryptPwd(password string) string {
const KeyLen = 10
salt := make([]byte, 8)
salt = []byte{12, 32, 4, 6, 66, 22, 222, 11}
HashPwd, err := scrypt.Key([]byte(password), salt, 16384, 9, 1, KeyLen)
if err != nil {
log.Fatal(err)
}
FinalPwd := base64.StdEncoding.EncodeToString(HashPwd)
return FinalPwd
}
写好之后可以使用gorm的hook来在创建之前调用
func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
u.Password = ScryptPwd(u.Password)
return nil
}