|
|
@ -3,36 +3,63 @@ package com.zsz.util;
|
|
|
|
import java.security.MessageDigest;
|
|
|
|
import java.security.MessageDigest;
|
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* MD5 工具类,用于对字符串进行 MD5 加密。
|
|
|
|
|
|
|
|
* 该类为 final 类,不可被继承,且所有方法均为静态方法,方便直接调用。
|
|
|
|
|
|
|
|
*/
|
|
|
|
public final class MD5 {
|
|
|
|
public final class MD5 {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 对输入的字符串进行 MD5 加密
|
|
|
|
|
|
|
|
* @param strSrc 待加密的原始字符串
|
|
|
|
|
|
|
|
* @return 加密后的十六进制字符串,如果加密过程中出现异常则抛出 RuntimeException
|
|
|
|
|
|
|
|
*/
|
|
|
|
public static String encrypt(String strSrc) {
|
|
|
|
public static String encrypt(String strSrc) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
|
|
|
|
// 定义十六进制字符数组,用于将字节转换为十六进制表示
|
|
|
|
char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
|
|
|
|
char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
|
|
|
|
'9', 'a', 'b', 'c', 'd', 'e', 'f' };
|
|
|
|
'9', 'a', 'b', 'c', 'd', 'e', 'f' };
|
|
|
|
|
|
|
|
// 将输入的字符串转换为字节数组
|
|
|
|
byte[] bytes = strSrc.getBytes();
|
|
|
|
byte[] bytes = strSrc.getBytes();
|
|
|
|
|
|
|
|
// 获取 MD5 算法的 MessageDigest 实例
|
|
|
|
MessageDigest md = MessageDigest.getInstance("MD5");
|
|
|
|
MessageDigest md = MessageDigest.getInstance("MD5");
|
|
|
|
|
|
|
|
// 使用输入的字节数组更新摘要
|
|
|
|
md.update(bytes);
|
|
|
|
md.update(bytes);
|
|
|
|
|
|
|
|
// 完成哈希计算,得到加密后的字节数组
|
|
|
|
bytes = md.digest();
|
|
|
|
bytes = md.digest();
|
|
|
|
|
|
|
|
// 获取加密后字节数组的长度
|
|
|
|
int j = bytes.length;
|
|
|
|
int j = bytes.length;
|
|
|
|
|
|
|
|
// 创建一个字符数组,长度为字节数组长度的两倍,用于存储十六进制表示
|
|
|
|
char[] chars = new char[j * 2];
|
|
|
|
char[] chars = new char[j * 2];
|
|
|
|
|
|
|
|
// 用于记录字符数组的索引
|
|
|
|
int k = 0;
|
|
|
|
int k = 0;
|
|
|
|
|
|
|
|
// 遍历加密后的字节数组
|
|
|
|
for (int i = 0; i < bytes.length; i++) {
|
|
|
|
for (int i = 0; i < bytes.length; i++) {
|
|
|
|
|
|
|
|
// 获取当前字节
|
|
|
|
byte b = bytes[i];
|
|
|
|
byte b = bytes[i];
|
|
|
|
|
|
|
|
// 将字节的高 4 位转换为十六进制字符并存储到字符数组中
|
|
|
|
chars[k++] = hexChars[b >>> 4 & 0xf];
|
|
|
|
chars[k++] = hexChars[b >>> 4 & 0xf];
|
|
|
|
|
|
|
|
// 将字节的低 4 位转换为十六进制字符并存储到字符数组中
|
|
|
|
chars[k++] = hexChars[b & 0xf];
|
|
|
|
chars[k++] = hexChars[b & 0xf];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 将字符数组转换为字符串并返回
|
|
|
|
return new String(chars);
|
|
|
|
return new String(chars);
|
|
|
|
} catch (NoSuchAlgorithmException e) {
|
|
|
|
} catch (NoSuchAlgorithmException e) {
|
|
|
|
|
|
|
|
// 打印异常堆栈信息
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
// 抛出运行时异常,提示 MD5 加密出错
|
|
|
|
throw new RuntimeException("MD5加密出错!!+" + e);
|
|
|
|
throw new RuntimeException("MD5加密出错!!+" + e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 主方法,用于测试 MD5 加密功能
|
|
|
|
|
|
|
|
* @param args 命令行参数
|
|
|
|
|
|
|
|
*/
|
|
|
|
public static void main(String[] args) {
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
|
|
|
// 对字符串 "123456" 进行加密
|
|
|
|
String encrypt = encrypt("123456");
|
|
|
|
String encrypt = encrypt("123456");
|
|
|
|
|
|
|
|
// 打印加密后的字符串
|
|
|
|
System.out.println(encrypt);
|
|
|
|
System.out.println(encrypt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|