package com.demo.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
/**
* @param str
* @Description: 32位小写MD5
*/
public static String parseStrToMd5L32(String str) {
String reStr = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] bytes = md5.digest(str.getBytes());
StringBuffer stringBuffer = new StringBuffer();
for (byte b : bytes) {
int bt = b & 0xff;
if (bt < 16) {
stringBuffer.append(0);
}
stringBuffer.append(Integer.toHexString(bt));
}
reStr = stringBuffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return reStr.toString();
}
// public static String parseStrToMd5L32(Map<String, String> params, boolean encode) throws UnsupportedEncodingException {
// String salt = StaticConstant.SIGN_SALT;//这里是约定的“盐”
// Set<String> keysSet = params.keySet();
// Object[] keys = keysSet.toArray();
// Arrays.sort(keys);
// StringBuffer temp = new StringBuffer();
// boolean first = true;
// for (Object key : keys) {
// if (first) {
// first = false;
// } else {
// temp.append("&");
// }
// temp.append(key).append("=");
// Object value = params.get(key);
// String valueString = "";
// if (null != value) {
// valueString = String.valueOf(value);
// }
// if (encode) {
// temp.append(URLEncoder.encode(valueString, "UTF-8"));
// } else {
// temp.append(valueString);
// }
// }
// return MD5Utils.md5(temp.toString() + salt).toLowerCase();
// return temp.toString() + salt;
// }
public static String md5(String password) {
byte[] bytes = null;
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(password.getBytes()); //更新摘要
bytes = digest.digest(); //再通过执行诸如填充之类的最终操作完成哈希计算。在调用此方法之后,摘要被重置。
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
StringBuilder builder = new StringBuilder(bytes.length * 2);
for (byte b : bytes) {
/**
* 0xFF默认是整形,一个byte跟0xFF相与会先将那个byte转化成整形运算
*/
if ((b & 0xFF) < 0x10) { //如果为1位 前面补个0
builder.append("0");
}
builder.append(Integer.toHexString(b & 0xFF));
}
return builder.toString();
}
/**
* @param str
* @Description: 32位大写MD5
*/
public static String parseStrToMd5U32(String str) {
String reStr = parseStrToMd5L32(str);
if (reStr != null) {
reStr = reStr.toUpperCase();
}
return reStr;
}
/**
* @param str
* @Description: 16位小写MD5
*/
public static String parseStrToMd5U16(String str) {
String reStr = parseStrToMd5L32(str);
if (reStr != null) {
reStr = reStr.toUpperCase().substring(8, 24);
}
return reStr;
}
/**
* @param str
* @Description: 16位大写MD5
*/
public static String parseStrToMd5L16(String str) {
String reStr = parseStrToMd5L32(str);
if (reStr != null) {
reStr = reStr.substring(8, 24);
}
return reStr;
}
}