**
* BUG不找我
*
* @author xiaofanzi
* @date 2022/7/5 9:11
*/
public class MD5Util {
private static final String SALT = "bdqn..@123";
private MD5Util(){}
public static String encode(String password) {
password = password + SALT;
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
throw new RuntimeException(e);
}
char[] charArray = password.toCharArray();
byte[] byteArray = new byte[charArray.length];
for (int i = 0; i < charArray.length; i++)
byteArray[i] = (byte) charArray[i];
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
}
public class PasswordHelper {
public static HashMap<String, String> encryptPassword(String password) {
HashMap<String, String> hashMap = new HashMap<String, String>();
// 创建一个SecureRandomNumberGenerator对象,用于生成随机数
RandomNumberGenerator randomNumberGenerator = new SecureRandomNumberGenerator();
// 定义算法名称为md5
String algorithmName = "md5";
// 定义加密迭代次数为2
int hashIterations = 2;
// 通过randomNumberGenerator生成随机字节数组,并转换为十六进制字符串作为密码的盐值
String salt = randomNumberGenerator.nextBytes().toHex();
// 使用SimpleHash类对密码进行加密,算法为algorithmName,密码为password,盐值为salt,迭代次数为hashIterations
String newPassword = new SimpleHash(algorithmName, password, ByteSource.Util.bytes(salt), hashIterations).toHex();
hashMap.put("salt", salt);
hashMap.put("password", newPassword);
return hashMap;
}
public static String encryptPasswordBySalt(String password, String salt) {
String algorithmName = "md5";
int hashIterations = 2;
// 使用SimpleHash类根据给定的算法名称、密码、盐值和哈希迭代次数对密码进行哈希处理,并将结果转换为十六进制字符串返回
return new SimpleHash(algorithmName, password, ByteSource.Util.bytes(salt), hashIterations).toHex();
}
}