首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java MD5 工具類:字符串/字節數組雙重載、十六進制輸出

     編輯:Java 相關知識

核心代碼

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Md5Util {

    /** 字符串 MD5 */
    public static String md5(String value) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] digest = md.digest(value.getBytes(StandardCharsets.UTF_8));
            return toHex(digest);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return value; // 降級返回原值
        }
    }

    /** 字節數組 MD5 */
    public static String md5(byte[] bytes) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] digest = md.digest(bytes);
            return toHex(digest);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return "";
        }
    }

    /** 字節數組 → 十六進制字符串 */
    private static String toHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 2);
        for (byte b : bytes) {
            String hex = Integer.toHexString(b & 0xFF);
            if (hex.length() == 1) sb.append('0');
            sb.append(hex);
        }
        return sb.toString();
    }
}

關鍵點解析

  1. UTF-8 顯式編碼:value.getBytes(StandardCharsets.UTF_8) 避免跨平台亂碼;
  2. & 0xFF:將有符號 byte 無符號化,保證 0x80~0xFF 正確轉為 80~ff 而非負數十六進制;
  3. StringBuilder 預分配:容量 bytes.length * 2,避免擴容開銷;
  4. 異常降級:理論上 JVM 必備 MD5,捕獲異常僅為極端防禦。

使用示例

String s = "hello world";
System.out.println(Md5Util.md5(s));        // 5eb63bbbe01eeed093cb22bb8f5acdc3
System.out.println(Md5Util.md5(s.getBytes())); // 同上

安全提醒

  • MD5 已被碰撞攻擊破解,**嚴禁用於密碼存儲、數字簽名、完整性校驗等安全敏感場景**;
  • 密碼請用 BCrypt/Argon2/PBKDF2(Spring Security PasswordEncoder);
  • 文件完整性校驗建議 SHA-256 或 SHA-3;
  • 本工具類僅適用於:非安全業務 Key 生成、緩存 Key、幂等性 Token 等**非抗碰撞**場景。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved