packagecom.bodi.repository;importjava.security.MessageDigest;public classMD5Util {/*** 十六进制下数字到字符的映射数组*/
private final static String[] hexDigits = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};/*** @Title: encodeByMD5
* @Description: 对字符串进行MD5编码
*@authoryihj
*@param @paramoriginString
*@param @return参数
*@returnString 返回类型
*@throws
*/
public staticString MD5(String originString){if (originString!=null) {try{//创建具有指定算法名称的信息摘要
MessageDigest md5 = MessageDigest.getInstance("MD5");//使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
byte[] results =md5.digest(originString.getBytes());//将得到的字节数组变成字符串返回
String result =byteArrayToHexString(results);returnresult;
}catch(Exception e) {
e.printStackTrace();
}
}return null;
}public staticString MD5Encode(String origin, String charsetname) {
String resultString= null;try{
resultString= newString(origin);
MessageDigest md= MessageDigest.getInstance("MD5");if (charsetname == null || "".equals(charsetname))
resultString=byteArrayToHexString(md.digest(resultString
.getBytes()));elseresultString=byteArrayToHexString(md.digest(resultString
.getBytes(charsetname)));
}catch(Exception exception) {
}returnresultString;
}/*** @Title: byteArrayToHexString
* @Description: 轮换字节数组为十六进制字符串
*@authoryihj
*@param @paramb
*@param @return参数
*@returnString 返回类型
*@throws
*/
private static String byteArrayToHexString(byte[] b){
StringBuffer resultSb= newStringBuffer();for(int i=0;i
resultSb.append(byteToHexString(b[i]));
}returnresultSb.toString();
}/*** @Title: byteToHexString
* @Description: 将一个字节转化成十六进制形式的字符串
*@authoryihj
*@param @paramb
*@param @return参数
*@returnString 返回类型
*@throws
*/
private static String byteToHexString(byteb){int n =b;if(n<0)
n=256+n;int d1 = n/16;int d2 = n%16;return hexDigits[d1] +hexDigits[d2];
}/*** MD5加密 byte 数据
*
*@paramsource
* 要加密字符串的byte数据
*@return
*/
public static String getMD5(byte[] source) {
String s= null;char hexDigits[] = { //用来将字节转换成 16 进制表示的字符
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd','e', 'f'};try{
java.security.MessageDigest md=java.security.MessageDigest
.getInstance("MD5");
md.update(source);byte tmp[] = md.digest(); //MD5 的计算结果是一个 128 位的长整数,//用字节表示就是 16 个字节
char str[] = new char[16 * 2]; //每个字节用 16 进制表示的话,使用两个字符,//所以表示成 16 进制需要 32 个字符
int k = 0; //表示转换结果中对应的字符位置
for (int i = 0; i < 16; i++) { //从第一个字节开始,对 MD5 的每一个字节//转换成 16 进制字符的转换
byte byte0 = tmp[i]; //取第 i 个字节
str[k++] = hexDigits[byte0 >>> 4 & 0xf]; //取字节中高 4 位的数字转换,//>>>//为逻辑右移,将符号位一起右移
str[k++] = hexDigits[byte0 & 0xf]; //取字节中低 4 位的数字转换
}
s= new String(str); //换后的结果转换为字符串
}catch(Exception e) {
e.printStackTrace();
}returns;
}
}