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

MD5 演算法 C# 完整實作(一):演算法起源、特性與填充規則

     編輯:關於C語言

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. 演算法步驟總覽

  1. 填充:訊息長度 ≡ 448 (mod 512) → 即位元組長度 % 64 = 56。方法:加一個 0x80 (1000 0000),再補 0x00 至滿足條件。共補 1~64 位元組。
  2. 附加長度:在填充後附加 64 位原始訊息長度 (位元數,小端序)。
  3. 初始化緩衝區:A=0x67452301, B=0xefcdab89, C=0x98badcfe, D=0x10325476 (小端序儲存)。
  4. 處理每個 512 位區塊:四輪非線性運算 (F/G/H/I),每輪 16 步,共 64 步。
  5. 輸出:A,B,C,D 連續小端序輸出為 128 位摘要。

下一篇將詳細說明四輪運算邏輯與常數表。

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