提供一個純 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 將每個位元組轉為兩位十六進位字元。MessageDigest。