【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实现多线程数据分片下载