微服务开发
创建一个微服务项目,所有的项目微服务都在这个项目中进行,创建joyshop_srv,我们无创建用户登录注册服务,所以我们在项目目录下再创建一个目录user_srv 及user_srv/global(全局的对象新建和初始化)user_srv/handler(业务逻辑代码)user_srv/model(用户相关的 model)user_srv/proto(用户相关的 model)main.go 服务启动文件
密码我们采用 md5 加密
1. Message Digest Algorithm 5(MD5)信息摘要算法
MD5 是一种常见的哈希算法,其主要特性如下:
-
压缩性
任意长度的数据,计算出的 MD5 值长度都是固定的。 -
容易计算
从原始数据计算出 MD5 值非常容易。 -
抗修改性
对原数据进行任何修改,哪怕只是一个字节,所产生的 MD5 值差异都很大。 -
强碰撞性
想找到两个不同的数据,使它们具有相同的 MD5 值,非常困难。 -
不可逆性
不可反解,无法通过 MD5 值还原出原始数据。
MD5 盐值加密
1. 加盐的目的
为了增强 MD5 加密的安全性,防止彩虹表攻击,通常会给原始数据添加 "salt"(盐值)再进行 MD5 加密。
2. 加盐方法
- 通过生成随机数和 MD5 生成字符串进行组合
- 将随机生成的 salt 值与原始密码进行拼接后再进行 MD5 加密。
-
如:
md5( password + salt ) - 数据库同时存储 MD5 值和 salt 值
- 在注册时:生成 salt、计算加盐后的 MD5,一并存入数据库。
- 在验证时:取出 salt,重新加密对比 MD5 值即可。
// 设置加密参数
options := &password.Options{
SaltLen: 16,
Iterations: 100,
KeyLen: 32,
HashFunction: sha512.New,
}
// 1. 加密
salt, encodedPwd := password.Encode("your_password", options)
final := fmt.Sprintf("$pbkdf2-sha512$%s$%s", salt, encodedPwd)
// 2. 拆分(模拟从数据库读取)
parts := strings.Split(final, "$")
saltFromDb := parts[2]
hashFromDb := parts[3]
// 3. 验证
ok := password.Verify("your_password", saltFromDb, hashFromDb, options)
fmt.Println("验证是否通过:", ok)
主题测试文章,只做测试使用。发布者:Walker,转转请注明出处:https://joyjs.cn/archives/4779