| | |
| | | import java.lang.reflect.*; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.security.MessageDigest; |
| | | import java.security.NoSuchAlgorithmException; |
| | | import java.util.*; |
| | | |
| | | /** |
| | |
| | | return intersection; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 对汉字字符串进行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; |
| | | } |
| | | } |
| | | |
| | | } |