import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class ChineseMD5Util { /** * 对汉字字符串进行MD5加密 * @param input 要加密的汉字字符串 * @return 32位小写MD5哈希值 * @throws NoSuchAlgorithmException */ public static String md5Chinese(String input) throws NoSuchAlgorithmException { if (input == null) { return null; } // 统一使用UTF-8编码 byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] digest = md.digest(inputBytes); // 将字节数组转换为16进制字符串 StringBuilder sb = new StringBuilder(); for (byte b : digest) { sb.append(String.format("%02x", b)); } return sb.toString(); } /** * 验证汉字字符串与MD5哈希是否匹配 * @param input 要验证的汉字字符串 * @param md5Hash 存储的MD5哈希值 * @return 如果匹配返回true,否则false */ public static boolean verifyChinese(String input, String md5Hash) { try { String computedHash = md5Chinese(input); return computedHash.equals(md5Hash.toLowerCase()); } catch (NoSuchAlgorithmException e) { // 理论上不会发生,因为MD5是Java标准库支持的 return false; } } public static void main(String[] args) { try { String chineseText = "你好,世界!"; // 加密 String md5Hash = md5Chinese(chineseText); System.out.println("原文: " + chineseText); System.out.println("MD5哈希: " + md5Hash); // 验证 boolean isValid = verifyChinese(chineseText, md5Hash); System.out.println("验证结果: " + (isValid ? "匹配" : "不匹配")); // 错误验证示例 boolean isWrongValid = verifyChinese("你好,世界!", md5Hash); System.out.println("错误文本验证: " + (isWrongValid ? "匹配" : "不匹配")); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } }