【MD5】快速实现MD5加密解密(盐值)
场景:模拟用户账号注册密码加密和登录验证
我这里是自定义的一个用户类拥有username和password字段,可以作为参考
1.用户密码加密入库
//模拟用户注册时的用户名密码 String username = "username"; String password = "123456"; //获取User对象 User user = new User(); //获取盐值 String salt = CodecUtils.generateSalt(); //通过盐值为密码加密 password = CodecUtils.md5Hex(password, salt); //把加密后的密码和盐值都存入到对象当中 user.setSalt(salt); user.setPassword(password); user.setUsername(username); //最后数据入库
2.用户登录时进行密码解密验证
//模拟用户登录时输入的用户名密码
String pw = "123456";
String username = "username";
//通过用户名获取该用户信息
User user = UserMapper.findByUserName(username);
//判断user是否为空 为空则返回null
if (user == null) {
return null;
}
//获取该user对象中的盐值
String salt = user.getSalt();
//获取该user对象中的密码
String password= user.getPassword();
//通过工具类对密码进行解密
password = CodecUtils.md5Hex(password, salt);
if(password.equals(pw)){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
3.最后附上MD5工具类
public class CodecUtils {
public static String md5Hex(String data,String salt) {
if (StringUtils.isBlank(salt)) {
salt = data.hashCode() + "";
}
return DigestUtils.md5Hex(salt + DigestUtils.md5Hex(data));
}
public static String shaHex(String data, String salt) {
if (StringUtils.isBlank(salt)) {
salt = data.hashCode() + "";
}
return DigestUtils.sha512Hex(salt + DigestUtils.sha512Hex(data));
}
public static String generateSalt(){
return StringUtils.replace(UUID.randomUUID().toString(), "-", "");
}
}
上一篇:
JS实现多线程数据分片下载
