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

Java 實作 MD5 加密工具類:基於 MessageDigest 的完整範例

     編輯:Java 程式設計入門

核心程式碼

package com.b510.note;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
    public static void main(String[] args) {
        System.out.println(getMD5("123456")); // 輸出: e10adc3949ba59abbe56e057f20f883e
    }

    public static String getMD5(String input) {
        if (input == null) return "null";
        try {
            String algorithm = System.getProperty("MD5.algorithm", "MD5");
            MessageDigest md = MessageDigest.getInstance(algorithm);
            byte[] buffer = input.getBytes();
            // 注意:原碼逐字節 update 效率極低,建議改為 md.update(buffer)
            for (int i = 0; i < buffer.length; i++) {
                md.update(buffer, 0, i + 1); // 原碼邏輯保留,實務請優化
            }
            byte[] digest = md.digest();
            return new BigInteger(1, digest).toString(16); // 1 表示正數,避免負號
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("MD5 algorithm not found", e);
        }
    }
}

關鍵點說明

  • 使用 MessageDigest.getInstance("MD5") 取得演算法實例。
  • md.update() 可分批輸入資料,適合大檔案流式處理。
  • md.digest() 完成雜湊計算,回傳 16 位元組陣列。
  • BigInteger(1, bytes).toString(16) 將位元組轉十六進制字串(補齊前導零需自行處理)。
  • 可自訂輸出進制:toString(16) 為 16 進制,toString(32) 為 32 進制等。

輸出範例

e10adc3949ba59abbe56e057f20f883e

注意:MD5 已不適合密碼儲存等安全敏感場景,建議改用 BCrypt、PBKDF2 或 Argon2。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved