1. 來歷
MD5 (Message-Digest Algorithm 5) 由 Ronald L. Rivest 於 1991 年設計,演進自 MD2→MD3→MD4。權威規格:RFC 1321 (1992 年 4 月提交 IETF)。
2. 用途
- 產生 128 位訊息摘要,作為數位簽名基礎
- 驗證檔案完整性 (偵測遺失/損壞)
- 密碼雜湊儲存 (需加鹽)
- 雜湊表索引計算
3. 特性
- 任意長度輸入 → 固定 128 位輸出
- 單向不可逆、抗碰撞 (理論上多對一,碰撞機率極低)
- 免專利費用,可自由使用
4. 安全性備註
「唯一」與「不可逆」非絕對:理論為多對一,碰撞攻擊 (如 2004 年王小雲團隊) 已能構造碰撞,**不建議用於新系統簽名/憑證**,建議改用 SHA-256/384/512。但檢驗檔案完整性、非安全關鍵場景仍廣泛使用。
5. 演算法步驟總覽
- 填充:訊息長度 ≡ 448 (mod 512) → 即位元組長度 % 64 = 56。方法:加一個
0x80 (1000 0000),再補 0x00 至滿足條件。共補 1~64 位元組。
- 附加長度:在填充後附加 64 位原始訊息長度 (位元數,小端序)。
- 初始化緩衝區:A=0x67452301, B=0xefcdab89, C=0x98badcfe, D=0x10325476 (小端序儲存)。
- 處理每個 512 位區塊:四輪非線性運算 (F/G/H/I),每輪 16 步,共 64 步。
- 輸出:A,B,C,D 連續小端序輸出為 128 位摘要。
下一篇將詳細說明四輪運算邏輯與常數表。