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();
|
}
|
}
|
}
|