【bcrypt】go使用bcrypt进行加密和验证

前言

项目开发过程中,在注册这一块,少不了对用户密码的加密,今天使用bcrypt来实现对密码的加密和验证

bcypt加密和md5加密的不同点在于,后者更安全,对于同一字符串每次生成的编码不同。

代码

1.结构体
type user struct {
	id  string
	pwd string
}
// 模拟数据库
 var userList  = make([]user,0)
2.注册功能
func Register(us user) error {
	if userIsExit(us.id){
		return errors.New("用户已存在")
	}
//	 对用户密码进行加密
	userPwd,err := PwdHash(us.pwd)
//  存入数据库
	us.pwd = userPwd
	userList = append(userList,us)
	return err
}
3.加密
// 注意导入 "golang.org/x/crypto/bcrypt"

func PwdHash(pwd string)(string,error){
	// 第二个参数是进行哈希的次数,这里采用了默认值10,数字越大生成的密码速度越慢,成本越大。但是更安全
	// bcrypt每次生成的编码是不同的,较于md5更安全
	bytes,err := bcrypt.GenerateFromPassword([]byte(pwd),bcrypt.DefaultCost)
	if err != nil{
		return "",err
	}
	return string(bytes),err
}
4.验证

func PwdVerify(pwd,hash string)bool {
	// CompareHashAndPassword 比较用户输入的明文和和数据库取出的的密码解析后是否匹配
	err := bcrypt.CompareHashAndPassword([]byte(hash),[]byte(pwd))
	return err == nil
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值