MD5(Message Digest Algorithm 5)是一种常用的哈希算法,用于将数据转换为固定长度的散列值。MD5算法将任意长度的数据作为输入,并生成一个128位(16字节)的散列值作为输出。
@Component
public class MD5Utils {
private static EncryptProperties encryptProperties;
@Autowired
public MD5Utils(EncryptProperties encryptProperties) {
MD5Utils.encryptProperties = encryptProperties;
}
public static String getEncryptPassword(String password) {
String saltPassword = "{" + encryptProperties.getSalt() + "}" + password;
MessageDigest MD5_DIGEST=null;
try {
MD5_DIGEST = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
for (int i = 0; i < encryptProperties.getRepeat(); i++) {
saltPassword = Base64.getEncoder().encodeToString(MD5_DIGEST.digest(saltPassword.getBytes()));
}
return saltPassword;
}
/**
* MD5加密(字符串部分非标准)
* @param origin 原始字符串
*/
@Deprecated
public static String getEncryptPasswordNoSalt(String origin) {
String resultString = null;
try {
resultString = origin;
MessageDigest md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
return resultString;
}
public static String byteArrayToHexString(byte[] b) {
StringBuilder resultSb = new StringBuilder();
for (byte aB : b) {
resultSb.append(byteToHexString(aB));
}
return resultSb.toString();
}
/**
* 转换byte到16进制
* @param b 要转换的byte
* @return 16进制格式
*/
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n = 256 + n;
}
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
"e", "f" };
}