|
|
|
@ -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
|
|
|
|
|
* 此方法用于对给定的字符串进行MD5加密编码,并返回大写形式的MD5结果字符串
|
|
|
|
|
*
|
|
|
|
|
* @param origin
|
|
|
|
|
* @param charsetname
|
|
|
|
|
* @return
|
|
|
|
|
* @param origin 要进行MD5加密的原始字符串
|
|
|
|
|
* @param charsetname 用于指定编码字符集的名称,如果为null或者空字符串,则使用默认字符集对原始字符串进行getBytes操作获取字节数组;如果指定了字符集名称,则按照该字符集进行getBytes操作获取字节数组,后续用于MD5摘要计算
|
|
|
|
|
* @return 经过MD5加密并转换为大写形式的结果字符串,如果在加密过程中出现异常,会返回null(当前代码中捕获异常但没有做其他处理,实际应用中可根据需求完善异常处理逻辑)
|
|
|
|
|
*/
|
|
|
|
|
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"};
|
|
|
|
|
}
|
|
|
|
|
}
|