(3)SpringBoot 2.X明文密码两次MD5处理
1. 用户端:PASS = MD5(明文+固定salt)
- 防止密码在http网络上明文传输,所以需要对password进行一次MD5,然后再传给服务端
2. 服务端:PASS = MD5(用户输入+ 随机salt)
- 防止恶意用户获取数据库数据可以通过彩虹表反推出原来的密码
3. 为什么使用MD5加密
- 为什么使用MD5加密?
由于http是明文传输,当输入密码若直接发送服务端验证,此时被截取将直接获取到明文密码,获取用户信息。加salt是为了混淆密码,原则就是明文密码不能在网络上传输。 - 为什么使用两次MD5加密?
因为第二次加密的salt为随机salt,即使两个原始密码相同,第二次加密得到的两个密码也不相同
4. 代码实现MD55Utils
public class MD5Util {
private static final String salt = "1a2b3c4d";
public static String md5(String src){
return DigestUtils.md5Hex(src);
}
public static String inputPassToFormPass(String inputPass){
String str = "" + salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);
return md5(str);
}
public static String formPassToDBPass(String formPass, String salt) {
String str = ""+salt.charAt(0)+salt.charAt(2) + formPass +salt.charAt(5) + salt.charAt(4);
return md5(str);
}
public static String inputPassToDbPass(String input, String saltDB){
String formPass = inputPassToFormPass(input);
String dbPass = formPassToDBPass(formPass, saltDB);
return dbPass;
}
public static void main(String[] args) {
System.out.println(inputPassToFormPass("123456"));
System.out.println(inputPassToDbPass("123456","1a2b3c4d"));
}
}