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

J2ME 專用 MD5 演算法實作類別原始碼

     編輯:J2ME

前言

提供一個純 Java 實作的 MD5 雜湊類別,適合 J2ME 環境(無 java.security.MessageDigest)。類別提供靜態方法 toMD5(String) 與實例方法 getMD5ofStr(String),輸出 32 字元十六進位字串。

核心原始碼

public class MD5 {
    // 常數定義(S11-S44、Hex、PADDING 等)略...

    private long[] state = new long[4];
    private long[] count = new long[2];
    private byte[] buffer = new byte[64];
    private byte[] digest = new byte[16];
    public String digestHexStr;

    public MD5() { md5Init(); }

    public String getMD5ofStr(String s) {
        md5Init();
        md5Update(s.getBytes(), s.length());
        md5Final();
        digestHexStr = "";
        for (int i = 0; i < 16; i++)
            digestHexStr += byteHEX(digest[i]);
        return digestHexStr;
    }

    public static String toMD5(String s) {
        return new MD5().getMD5ofStr(s);
    }

    // 內部方法:md5Init, md5Update, md5Final, md5Transform,
    // F/G/H/I, FF/GG/HH/II, Encode, Decode, b2iu, byteHEX 等完整實作...
    // 程式碼完整對應 RFC 1321 標準流程。
}

使用範例

String plain = "hello";
String md5 = MD5.toMD5(plain);  // 輸出: 5D41402ABC4B2A76B9719D911017C592

實作細節說明

  • 採用 long 模擬 32 位無號整數運算,配合位移與遮罩處理溢位。
  • md5Update 處理分塊填充與長度計數。
  • md5Final 執行標準填充(PADDING + 位元長度)並輸出 128 位雜湊值。
  • byteHEX 將每個位元組轉為兩位十六進位字元。
  • 無外部相依,可直接複製到 J2ME 專案使用。

注意事項

  1. MD5 已不適合安全性敏感場景(如密碼儲存),建議改用 SHA-256 或 PBKDF2。
  2. J2ME 環境若支援 JSR 177 (SATSA),優先使用系統提供的 MessageDigest。
  3. 大量資料雜湊時注意效能,避免在 UI 執行緒阻塞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved