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

MD5 訊息摘要算法深度解析:原理、應用與安全性

     編輯:VC 教學

什麼是 MD5?

MD5(Message-Digest Algorithm 5)由 MIT 計算機科學實驗室與 RSA Data Security Inc. 於 90 年代初設計,經 MD2、MD3、MD4 迭代而來。它是一種單向雜湊函數,將任意長度的「位元組串」轉換為固定長度(128 位,16 位元組)的「指紋」值。

關鍵特性:

  • 輸入敏感:輸入任意微小變化,輸出劇烈改變(雪崩效應)。
  • 不可逆:無法從雜湊值反推原始資料(數學上為多對一映射)。
  • 固定長度:無論輸入多長,輸出恆為 128 位。

核心應用場景

1. 檔案完整性校驗(指紋)

對檔案計算 MD5 值並保存。傳輸或儲存後重新計算,若值異則檔案被篡改。結合第三方時間戳或數位簽名,可防止發布方抵賴。

2. 密碼儲存(不儲存明文)

系統僅儲存密碼的 MD5 雜湊值。用戶登入時,將輸入密碼計算 MD5 再比對。開發者、管理員均無法得知原始密碼(僅能重設)。

3. 字典攻擊與防禦

攻擊者預計算常見密碼的 MD5 值建立「彩虹表」,再查表破解。防禦措施:

  • 使用鹽值:儲存前在密碼前/後附加隨機字串再雜湊,使預計算失效。
  • 採用慢速雜湊(如 bcrypt、PBKDF2、Argon2)增加暴力破解成本。
  • 限制登入失敗次數、啟用多因子認證(MFA)。

MD5 算法流程(RFC 1321)

  1. 填充:在訊息末尾加 1 個 1、若干 0,使長度 ≡ 448 (mod 512) 位。
  2. 附加長度:以 64 位小端序整數記錄原始訊息位長度,補至 512 位倍數。
  3. 初始化鏈接變量:四個 32 位暫存器 A=0x67452301, B=0xEFCDAB89, C=0x98BADCFE, D=0x10325476。
  4. 四輪主迴圈:每輪 16 步,共 64 步。每步使用非線性函數(F、G、H、I)、常數表 T[i]、循環左移、模 232 加法,混合訊息分塊與暫存器值。
  5. 輸出:最終 A、B、C、D 串接為 128 位雜湊值(小端序)。

安全性現狀與建議

MD5 自 2004 年起被證實存在碰撞攻擊(可構造兩不同輸入產生相同雜湊),已不適合用於數位簽名、SSL 憑證等需強碰撞抵抗的場景。但對於檔案校驗、非安全關鍵的唯一標識生成,仍具實用價值。

現代替代方案:

  • SHA-2 系列(SHA-256、SHA-512)
  • SHA-3(Keccak)
  • 密碼儲存專用:bcrypt、scrypt、Argon2、PBKDF2

參考資源

RFC 1321 官方規範:https://www.ietf.org/rfc/rfc1321.txt

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