对于密码等敏感性较高的数据,进行MD5加密操作,并解密对比进行校验。
实操代码如下:
public class SaltEncryptAndDecryptUtil {
/**
* 加密(加盐处理)
*
* @param password 待加密密码(需要加密的密码)
* @return 加密后的密码
*/
public static String encrypt(String password) {
// 随机盐值 UUID
String salt = UUID.randomUUID().toString().replaceAll(StrPool.DASH, StrPool.EMPTY);
// 密码 = md5(随机盐值+密码)
String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
return salt + StrPool.DOLLAR + finalPassword;
}
/**
* 解密
*
* @param password 要验证的密码(未加密)
* @param dbPassword 数据库中的加了盐值的密码
* @return 对比结果 true OR false
*/
public static boolean decrypt(String password, String dbPassword) {
boolean result = false;
if (StringUtils.hasLength(password) && StringUtils.hasLength(dbPassword)) {
if (dbPassword.length() == 65 && dbPassword.contains(StrPool.DOLLAR)) {
String[] dbPasswordArr = dbPassword.split(StrPool.BACK_SLASH + StrPool.DOLLAR);
// 盐值
String salt = dbPasswordArr[0];
String finalPassword = dbPasswordArr[1];
// 使用同样的加密算法和随机盐值生成最终加密的密码
password = DigestUtils.md5DigestAsHex((salt + password).getBytes());
if (finalPassword.equals(password)) {
result = true;
}
}
}
return result;
}
public static void main(String[] args) {
// 加密
String encrypt = encrypt("123456");
// 解密之后进行比对
boolean decrypt = decrypt("123456", encrypt);
System.out.println(encrypt); // d17e075b318d41eea9050c3315737efe$c873da6ab7e06d90d7fb80ffd13819e5
System.out.println(decrypt); // true
}
}