/**
* 消息摘要工具类。集成了16位MD5、32位MD5、SHA1、SHA224、SHA256、SHA384、SHA512;
* @author 周瑜
* @company <a href="http://kuaixueit.com">快学大数据</a>
*/
public final class HashUtils {
/**
* 根据指定的字符串,返回SHA1的摘要结果
* @param data 要生成摘要信息的字符串
* @return
*/
public static final String toSHA1(String data) {
return compute(data, "SHA-1");
}
/**
* 根据指定的字符串,返回SHA224的摘要结果
* @param data 要生成摘要信息的字符串
* @return
*/
public static final String toSHA224(String data) {
return compute(data, "SHA-224");
}
/**
* 根据指定的字符串,返回SHA256的摘要结果
* @param data 要生成摘要信息的字符串
* @return
*/
public static final String toSHA256(String data) {
return compute(data, "SHA-256");
}
/**
* 根据指定的字符串,返回SHA384的摘要结果
* @param data 要生成摘要信息的字符串
* @return
*/
public static final String toSHA384(String data) {
return compute(data, "SHA-384");
}
/**
* 根据指定的字符串,返回SHA512的摘要结果
* @param data 要生成摘要信息的字符串
* @return
*/
public static final String toSHA512(String data) {
return compute(data, "SHA-512");
}
/**
* 根据指定的字符串,返回32为MD5的摘要结果
* @param data 要生成摘要信息的字符串
* @return
*/
public static final String toMD5_32(String data) {
return compute(data, "md5");
}
/**
* 根据指定的字符串,返回16位MD5的摘要结果
* @param data 要生成摘要信息的字符串
* @return
*/
public static final String toMD5_16(String data) {
return compute(data, "md5").substring(8, 24);
}
/**
* 根据指定的字符串和指定的摘要算法,返回对应的摘要结果
* @param data 要生成摘要信息的字符串
* @param strType 指定的摘要算法
* @return
*/
private static final String compute(String data,String strType ) {
try {
MessageDigest digest = MessageDigest.getInstance(strType);
digest.update(data.getBytes("utf-8"));
byte[] bs = digest.digest();
StringBuilder sb = new StringBuilder();
for (byte b : bs) {
int temp = b & 0xFF;
if (temp < 16) {
sb.append("0");
}
sb.append(Integer.toHexString(temp));
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
}
转载于:https://www.cnblogs.com/zhou-yu/p/9294024.html