pull/4/head
zhouyu 9 months ago
parent 2ed9f5e576
commit 153c72cb36

@ -6,6 +6,8 @@ import java.security.MessageDigest;
* MD5
*/
public class MD5Util {
// 将字节数组转换为十六进制字符串的方法
// 该方法通过遍历字节数组中的每个字节调用byteToHexString方法将每个字节转换为对应的十六进制表示形式并依次添加到StringBuffer中最后返回拼接好的十六进制字符串
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然后分别计算出十六进制表示中的高位和低位数字对应的字符最后返回由这两个字符组成的十六进制字符串
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
@ -24,16 +28,17 @@ public class MD5Util {
}
/**
* MD5
* MD5MD5
*
* @param origin
* @param charsetname
* @return
* @param origin MD5
* @param charsetname null使getBytesgetBytesMD5
* @return MD5null
*/
private static String MD5Encode(String origin, String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
// 获取MD5消息摘要算法的实例用于后续计算字符串的MD5摘要信息
MessageDigest md = MessageDigest.getInstance("MD5");
if (charsetname == null || "".equals(charsetname))
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
@ -44,16 +49,20 @@ public class MD5Util {
return resultString.toUpperCase();
}
// 对外提供的一个方便的MD5加密方法默认使用UTF-8字符集对传入的原始字符串进行MD5加密并返回加密后的大写结果字符串
// 该方法内部调用了MD5Encode方法传入原始字符串和"utf-8"字符集名称来进行具体的加密操作,同时注释提到此处可以添加加盐操作(加盐是一种提高密码安全性的手段,在实际应用中可根据需要进一步完善)
public static String MD5EncodeUtf8(String origin) {
//这里可以加盐
return MD5Encode(origin, "utf-8");
}
// 主方法是Java程序的入口点在这里主要用于测试MD5EncodeUtf8方法传入字符串"123456"进行MD5加密并将加密后的结果输出打印到控制台方便简单验证MD5加密功能是否正常
public static void main(String[] args) {
System.out.println(MD5EncodeUtf8("123456"));
}
// 定义一个静态的十六进制字符数组用于在将字节转换为十六进制字符串时根据字节对应的数值查找对应的十六进制字符表示数组中依次存放了0到f的十六进制字符表示
private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
}
}
Loading…
Cancel
Save