记录md5密码加密方式
自建MD5Util文件,内部设置方法encrypt返回String类型的密码内容
String salt = MD5Util.getRandomString(12);
String pwd = MD5Util.encrypt(userPwd, salt);
其方法参数userPwd为输入的密码明码,salt为加密盐;
salt可自设固定字符串,但为了增加安全级数,采用字符随机拼接的方式
/**
* 返回指定长度随机字符粗
*/
public static String getRandomString(int length) {
String base = "abcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
回到加密方法encrypt中
/**
* 加密文本
* @param text 要加密的文本
* @param salt 加密盐
* @return 加密后的文本
*/
public static String encrypt(String text, String salt) {
try {
return byteToHexString(encryptToBytes(text, salt));
} catch (Exception e) {
return text + salt;
}
}
其中encryptToBytes方法
/**
* 加密文本,返回字节数组
* @param text 要加密的文本
* @param salt 加密盐
* @return 加密后的字节数组
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public static byte[] encryptToBytes(String text, String salt)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(salt.getBytes("UTF-8"));
md.update(text.getBytes("UTF-8"));
return md.digest();
}
返回结果需转换为String才可实例化到数据库中,故使用转换方法byteToHexString
/**
* 将数组转换成16进制字符串
*/
public static String byteToHexString(byte[] salt){
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < salt.length; i++) {
String hex = Integer.toHexString(salt[i] & 0xFF);
if(hex.length() == 1){
hex = '0' + hex;
}
hexString.append(hex.toUpperCase());
}
return hexString.toString();
}
至此,输入的明码userPwd经随机盐salt加密完毕