package org.security;
import org.apache.commons.codec.digest.DigestUtils;
import java.util.UUID;
/**
* @author 50649
*/
public class SecurityUtil {
/**
* 加盐加密
*
* @param password
* @return
*/
public static String encrypt(String password) {
// 每次生成内容不同的,但长度固定 32 位的盐值
String salt = UUID.randomUUID().toString().replace("-", "");
// 最终密码=md5(盐值+原始密码)
String finalPassword = DigestUtils.md5Hex((salt + password).getBytes());
return salt + finalPassword;
}
/**
* 密码验证
*
* @param password 待验证密码
* @param finalPassword 最终正确的密码(数据库中加盐的密码)
* @return
*/
public static boolean decrypt(String password, String finalPassword) {
// 非空效验
if (null == password || null == finalPassword) {
return false;
}
if (finalPassword.length() != 64) {
// 最终密码不正确
return false;
}
// 盐值
String salt = finalPassword.substring(0, 32);
// 使用盐值+待确认的密码生成一个最终密码
String securityPassword = DigestUtils.md5Hex((salt + password).getBytes());
System.out.println("securityPassword=="+securityPassword);
// 使用盐值+最终的密码和数据库的真实密码进行对比
return (salt + securityPassword).equals(finalPassword);
}
public static void main(String[] args) {
String password = "123";
// System.out.println(SecurityUtil.encrypt(password)); // 4d94e438ab74495a8bb2fea0bf96887d9222409880242be59dbda7265d64418b
// System.out.println(SecurityUtil.encrypt(password)); // 942890192ad04369a1667b2b0308a2640d052e9b17d422ec8e7925e81af95470
// System.out.println(SecurityUtil.encrypt(password)); // b8fdcdbc855a41afa7d0135304bd826e025f7d140c66342f69833578d2d64776
System.out.println(SecurityUtil.decrypt(password, "4d94e438ab74495a8bb2fea0bf96887d9222409880242be59dbda7265d64418b"));
System.out.println(SecurityUtil.decrypt(password, "942890192ad04369a1667b2b0308a2640d052e9b17d422ec8e7925e81af95470"));
System.out.println(SecurityUtil.decrypt(password, "b8fdcdbc855a41afa7d0135304bd826e025f7d140c66342f69833578d2d64776"));
}
}