pull/4/head
zhouyu 9 months ago
parent e09b4acc4e
commit cb7a3b15bf

@ -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"};
}
/**
* MD5MD5
*
* @param origin MD5MD5
* @param charsetname "utf-8"null使MD5MD5
* @return MD5
Loading…
Cancel
Save