为什么需要两次md5加密?
1.用户端:Pass = MD5(明文+固定salt)
目的:防止被人恶意截取数据包,得到明文密码
2.服务端:Pass = MD5(用户输入+随机salt)
目的:万一数据库被盗,有可能通过反查表来得到密码
引入MD5所需依赖
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>
创建md5加密工具类
package com.yang.util;
import org.apache.commons.codec.digest.DigestUtils;
public class MD5Util {
/**
* md5加密
*
* @param src 对一个加salt的密码进行md5加密
* @return 返回md5加密后的结果
*/
public static String md5(String src) {
return DigestUtils.md5Hex(src);
}
private static final String salt = "1a2b3c4d";
/**
* 明文密码第一次进行md5加密
*
* @param inputPass 表单输入的密码
* @return 返回加密后的结果
*/
public static String inputPassFormPass(String inputPass) {
String str = salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);
return md5(str);
}
/**
* @param formPass 表单前端密码+salt 被md5加密后的密码
* @return 返回加salt md5后的密码
*/
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);
}
/**
* @param input 表单输入
* @param saltDB 数据库salt
* @return 由表单输入经过两次md5加密后存入数据库
*/
public static String inputPassToDbPass(String input, String saltDB) {
String formPass = inputPassFormPass(input);
String DBPass = formPassToDBPass(formPass, saltDB);
return DBPass;
}
public static void main(String[] args) {
System.out.println(inputPassFormPass("123456"));
System.out.println(formPassToDBPass(inputPassFormPass("123456"), "1a2b3c4d"));
}
}