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