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

Java 計算 MD5 雜湊值的兩種高效實現方式

     編輯:Java 相關知識

MD5 簡介

MD5(Message Digest Algorithm 5)是廣泛應用於完整性校驗、數字簽名等場景的雜湊函數,將任意長度輸入映射為 128 位(32 字符十六進制)摘要。

方式一:純 JDK 實現(無外部依賴)

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

public class Md5Util {
    private static final char[] HEX_DIGITS = 
        {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

    public static String md5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] digest = md.digest(input.getBytes(StandardCharsets.UTF_8));
            return bytesToHex(digest);
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalStateException("MD5 algorithm not available", e);
        }
    }

    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 2);
        for (byte b : bytes) {
            sb.append(HEX_DIGITS[(b >> 4) & 0x0f]);
            sb.append(HEX_DIGITS[b & 0x0f]);
        }
        return sb.toString();
    }
}

優點: 零依賴、可控性高。缺點: 代碼較繁瑣。

方式二:Apache Commons Codec 一行代碼搞定

引入依賴:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

調用:

import org.apache.commons.codec.digest.DigestUtils;

String md5 = DigestUtils.md5Hex("百度.com");  // 自動處理編碼與十六進制轉換

優點: 極度簡潔、經過大規模生產驗證、支援更多雜湊算法。缺點: 增加第三方 JAR 體積。

效能與選型建議

  • 極度敏感的無依賴環境 → 方式一
  • 一般業務開發、追求開發效率 → 方式二(推薦)
  • 高併發場景可考慮緩存 MessageDigest 實例或使用 ThreadLocal 避免線程競爭

安全提示

MD5 已不適合密碼存儲等安全敏感場景,請改用 BCrypt、Argon2 或 PBKDF2 等慢速雜湊算法。

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