|
|
|
@ -6,6 +6,8 @@ import java.security.MessageDigest;
|
|
|
|
|
* MD5加密工具类
|
|
|
|
|
*/
|
|
|
|
|
public class MD5Util {
|
|
|
|
|
// 这个私有静态方法用于将字节数组转换为十六进制字符串表示形式。
|
|
|
|
|
// 它通过遍历字节数组中的每个字节,调用byteToHexString方法将每个字节转换为对应的十六进制字符表示,然后将这些字符依次追加到StringBuffer对象中,最后返回拼接好的十六进制字符串结果,该方法在后续的MD5编码过程中用于将字节形式的摘要结果转换为便于查看和使用的十六进制字符串形式。
|
|
|
|
|
private static String byteArrayToHexString(byte b[]) {
|
|
|
|
|
StringBuffer resultSb = new StringBuffer();
|
|
|
|
|
for (int i = 0; i < b.length; i++)
|
|
|
|
@ -14,6 +16,8 @@ public class MD5Util {
|
|
|
|
|
return resultSb.toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 这个私有静态方法用于将单个字节转换为十六进制字符串表示形式。
|
|
|
|
|
// 首先,如果字节值为负数(在Java中字节是有符号的,范围是 -128 到 127),通过加上256将其转换为无符号的等效值(范围变为0到255),然后分别计算出高4位和低4位对应的十六进制数字(通过除以16取整得到高4位,取余得到低4位),最后从预定义的十六进制字符数组hexDigits中取出对应的字符并拼接起来返回,从而实现将字节转换为十六进制字符串的功能。
|
|
|
|
|
private static String byteToHexString(byte b) {
|
|
|
|
|
int n = b;
|
|
|
|
|
if (n < 0)
|
|
|
|
@ -23,37 +27,9 @@ public class MD5Util {
|
|
|
|
|
return hexDigits[d1] + hexDigits[d2];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 返回大写MD5
|
|
|
|
|
*
|
|
|
|
|
* @param origin
|
|
|
|
|
* @param charsetname
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private static String MD5Encode(String origin, String charsetname) {
|
|
|
|
|
String resultString = null;
|
|
|
|
|
try {
|
|
|
|
|
resultString = new String(origin);
|
|
|
|
|
MessageDigest md = MessageDigest.getInstance("MD5");
|
|
|
|
|
if (charsetname == null || "".equals(charsetname))
|
|
|
|
|
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
|
|
|
|
|
else
|
|
|
|
|
resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
|
|
|
|
|
} catch (Exception exception) {
|
|
|
|
|
}
|
|
|
|
|
return resultString.toUpperCase();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static String MD5EncodeUtf8(String origin) {
|
|
|
|
|
//这里可以加盐
|
|
|
|
|
return MD5Encode(origin, "utf-8");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
System.out.println(MD5EncodeUtf8("123456"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5",
|
|
|
|
|
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 这个私有静态方法用于对给定的字符串进行MD5编码,并返回大写形式的MD5编码结果。
|
|
|
|
|
*
|
|
|
|
|
* @param origin 要进行MD5编码的原始字符串,也就是需要生成MD5摘要的输入内容。
|
|
|
|
|
* @param charsetname 用于指定编码字符集的名称,例如"utf-8"等,如果为null或者空字符串,则使用默认的字符编码方式将字符串转换为字节数组进行MD5计算;如果指定了具体的字符集,则按照该字符集将字符串转换为字节数组后再进行MD5计算,这样可以适应不同字符编码的字符串处理需求。
|
|
|
|
|
* @return 返回经过MD5编码
|