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);