说明
Golang 官方包 crypto/bcrypt 是非常棒的密码加密解决方案,同一个字符串,例如说 abc123456 ,每一次加密出来的结果都不一样,也就是不可逆。这样杜绝了黑客拿到加密数据以后倒推数据的可能。
如何使用 bcrypt 包?
- 首先我们将 bcrypt 封装到新建的 password 包中,并统一在这个包里做好错误处理;
- 利用 GORM 提供的模型钩子,在创建和更新时对密码进行加密;
- 登录时拿用户提交的明文密码与数据库里的加密过的密码进行配对;
底层包 password 包含以下方法:
方法名称 | 说明 |
---|---|
password.Hash | 使用 bcrypt 对密码进行加密 |
password.CheckHash | 对比明文密码和数据库的哈希值 |
password.IsHashed | 判断字符串是否是哈希过的数据 |
因模型更新的钩子里无法判断某个字段是否使用了新的值,故统一将使用 password.IsHashed 来判断,没有哈希过的,直接加哈希就行。接下来在代码中看会比较直观一点。
安装
$ go get golang.org/x/crypto/bcrypt
评论前必须登录!
注册