V0版本:
简单的注册,前端先进行初步核对,两次输入的密码是否相等?用户账号和密码是否符合要求?核对成功后前端传来账号密码,拿到用户名去数据库核对,如果没有找到相同的用户名就插入到数据库,找到相同的用户名就返回”用户已存在”
V1版本:
加入了uuid
1. 导入依赖
<!-- 雪花算法 -->
<dependency>
<groupId>com.github.yitter</groupId>
<artifactId>yitter-idgenerator</artifactId>
<version>1.0.6</version>
</dependency>
2. 使用
user.setUuid(String.valueOf(YitIdHelper.nextId()));
V2版本:
1. 加盐工具类
import java.security.SecureRandom;
import java.util.Base64;
public class creaSaltUtil {
// 这是一个生成盐的方法:
public String generateSalt(){
// 这是一个生成随机盐的私有方法
SecureRandom secureRandom = new SecureRandom();
byte[] saltByte = new byte[16];
// 将生成的随机字节填充到盐字节数组中
secureRandom.nextBytes(saltByte);
// 直接转成String类型可能存在丢失数据或引入不可见字符问题
// return new String(saltByte);
// 所以这里将随机盐数组转换成Base64编码的字符串
return Base64.getEncoder().encodeToString(saltByte);
}
}
2. 使用
// 在密码加密过程中添加盐值可以增加密码的安全性,防止彩虹表攻击
creaSaltUtil creaSaltUtil = new creaSaltUtil();
// 生成随机的盐值
String salt=creaSaltUtil.generateSalt();
String saltPwd=password+salt;
// 对拼接后的字符串进行MD5哈希运算,并将结果转换为16进制字符串。
// 这样处理后的密码存储在数据库中,即使数据库泄露,也无法直接获取用户的原始密码
password = DigestUtils.md5DigestAsHex(saltPwd.getBytes());
// 将加密后的密码和生成的盐值分别设置回User对象中
user.setPassword(password);
user.setSalt(salt);