用于对项目中密码生成MD5摘要和加盐的工具类

import java.security.MessageDigest;
/**
* 用于对项目中密码生成MD5摘要和加盐的工具类
* @author 周瑜
*/
public final class MD5Util {
private static final char[] hexadecimal = {'0','1','2','3','4','5','6',
'7','8','9','a','b','c','d','e','f'};

/**
* 根据指定的字符串,返回对应的MD5摘要结果
* @param data 要生成摘要信息的字符串
* @return
*/
public static final String toMD5(String data) {
if(data == null) {
throw new NullPointerException("参数字符串不能为空!");
}
try {
MessageDigest digest = MessageDigest.getInstance("md5");
byte[] binaryData = digest.digest(data.getBytes("utf-8"));
char[] buffer = new char[2*binaryData.length];
for (int i=0; i<binaryData.length; i++) {
int low = binaryData[i] & 0x0f;
int high = (binaryData[i] & 0xf0) >> 4;
buffer[i*2] = hexadecimal[high];
buffer[i*2 + 1] = hexadecimal[low];
}
return String.valueOf(buffer);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**
* 根据参数返回加盐的md5摘要
* @param param
* @return
*/
public static final String toMD5Salt(String param) {
//获取参数字符串的一次MD5的结果
String md5 = toMD5(param);
//将上面结果和参数字符串拼接后的hash码,作为盐
int hashCode = (param+md5).hashCode();
//将盐和第一次MD5的结果和参数字符串拼接起来,再次MD5运算
md5 = toMD5(hashCode+md5+param);
//根据上面得到的哈希码的最低16位获取一个1到16的值
int i = (hashCode&0xF) + 1;//结果是1到16
//将第二次MD5的结果根据上面的结果重新排列
md5 = md5.substring(i, 16 + i) + md5.replace(md5.substring(i, 16 + i), "");
//返回重新排序的MD5
return md5;
}
}

转载于:https://www.cnblogs.com/zhou-yu/p/9293962.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值