土薯工具 Toolshu.com 登錄 用戶注冊

AES加密模式詳解:CBC、ECB、CTR、CFB、OFB 怎麼選?

原創 作者:bhnw 於 2026-04-05 10:35 發佈 13次瀏覽 收藏 (0)

爲什麼選對加密模式比選對算法更重要

AES 本身是一種分組密碼:每次只能加密固定長度(128位)的數據塊。當你需要加密任意長度的數據時,就必須決定如何把這些數據塊"串"起來——這就是加密模式(Mode of Operation)要解決的問題。

同樣是 AES-256,用錯了模式,安全性可能會一落千丈。2013年 Adobe 數據泄露事件中,密碼庫的加密方式正是用了最不安全的 ECB 模式,導致攻擊者即便拿不到密鑰,也能通過密文的規律性直接推斷出哪些用戶使用了相同的密碼。

本文對比 AES 最常見的五種模式:ECB、CBC、CFB、OFB、CTR,幫你在實際項目中做出正確選擇。


五種模式快速對比

模式 並行加密 並行解密 需要IV 流式處理 安全性
ECB ⚠️ 弱
CBC ✅ 強
CFB ✅ 強
OFB ✅ 強
CTR ✅* ✅ 強

*CTR 模式使用 Nonce(數字只用一次)代替傳統 IV,本質相同。


ECB:最簡單,也最危險

ECB(Electronic Codebook,電子密碼本)是最樸素的實現:把明文切成等長的塊,每塊獨立加密。

致命缺陷:相同的明文塊,始終產生相同的密文塊。

這意味着密文中保留了原始數據的結構信息。經典的演示案例是用 ECB 模式加密一張 Linux 企鵝圖片——加密後的圖片依然能清晰辨認出企鵝的輪廓,因爲顏色相同的像素塊加密結果完全一樣。

明文塊A → 密文塊X
明文塊A → 密文塊X  ← 完全相同!攻擊者可以據此推斷規律
明文塊B → 密文塊Y

結論:ECB 不應該在任何實際場景中使用。 它存在於工具裏,只是爲了兼容極少數遺留系統。


CBC:最廣泛,最經典

CBC(Cipher Block Chaining,密碼塊鏈接)是目前使用最廣泛的模式。它的核心思路是:加密每個塊之前,先把它與上一個密文塊做 XOR 運算,再進行加密。第一個塊沒有前驅,所以需要一個初始化向量(IV)

明文塊1 XOR IV → 加密 → 密文塊1
明文塊2 XOR 密文塊1 → 加密 → 密文塊2
明文塊3 XOR 密文塊2 → 加密 → 密文塊3

優點:

  • 相同明文塊因 XOR 鏈式操作,產生完全不同的密文
  • 密文無規律性,安全性高
  • 廣泛兼容,OpenSSL、各語言加密庫均默認支持

缺點:

  • 加密過程無法並行(每塊依賴上一塊的結果)
  • 解密可以並行
  • 需要正確處理 Padding(填充),Padding Oracle 攻擊是其主要威脅

適用場景: 文件加密、數據庫字段加密、API 報文加密。與 OpenSSL enc 命令交互時,默認也是 CBC 模式。

💡 使用 toolshu.com 的 AES 在線加解密工具,可以直接體驗 CBC 模式的"Passphrase 模式",它與 openssl enc -aes-256-cbc 命令完全兼容。


CFB:流式加密,適合實時數據

CFB(Cipher Feedback,密碼反饋)把塊密碼轉變成流密碼的工作方式。它不直接加密明文塊,而是先加密上一個密文塊(或 IV),再把結果與明文塊 XOR。

加密(IV) XOR 明文塊1 → 密文塊1
加密(密文塊1) XOR 明文塊2 → 密文塊2

優點:

  • 無需對明文進行填充
  • 支持以小於塊大小的單位(如字節)進行加密,適合流式場景
  • 解密可以並行

缺點: 加密不能並行,且一個密文塊損壞會影響後續兩個塊的解密。

適用場景: 流媒體傳輸、串行數據加密、需要實時處理的場景。


OFB:容錯性強,離線流密碼

OFB(Output Feedback,輸出反饋)與 CFB 很像,但有一個關鍵區別:反饋的是加密函數的輸出,而不是密文塊。這意味着密鑰流可以完全獨立於明文/密文提前生成。

KeyStream1 = 加密(IV)
KeyStream2 = 加密(KeyStream1)
KeyStream3 = 加密(KeyStream2)

密文塊1 = 明文塊1 XOR KeyStream1
密文塊2 = 明文塊2 XOR KeyStream2

優點:

  • 密文塊損壞不會傳播錯誤——損壞的位隻影響對應位,不影響後續塊
  • 可以提前預計算密鑰流

缺點:

  • 加密和解密都不能並行
  • 絕對不能對同一個 IV 加密兩段不同的明文(否則密鑰流複用,安全性崩潰)

適用場景: 衛星通信等高誤碼率信道,容忍少量比特翻轉但不能讓錯誤擴散的場景。


CTR:性能最佳,現代首選

CTR(Counter,計數器)模式是現代系統中最推薦的模式之一。它通過加密一個不斷遞增的計數器來生成密鑰流,再與明文 XOR。

密鑰流塊1 = 加密(Nonce || Counter=1)
密鑰流塊2 = 加密(Nonce || Counter=2)
密鑰流塊3 = 加密(Nonce || Counter=3)

密文塊N = 明文塊N XOR 密鑰流塊N

優點:

  • 加密和解密都可以完全並行,性能極高
  • 無需 Padding
  • 可以隨機訪問密文的任意塊,無需從頭開始
  • 天然適合多核處理器和 GPU 加速

缺點:

  • Nonce 絕對不能重複使用。同一密鑰下重複 Nonce 會直接泄露明文(XOR 密鑰流複用攻擊)。

適用場景: 高性能系統(數據庫全盤加密、TLS 協議中與 GCM 結合使用)。AES-GCM(CTR模式加認證碼)是目前 HTTPS/TLS 1.3 的主流選擇。


實際選擇建議

新項目,通用場景 → 優先考慮 AES-GCM(CTR + 認證),它同時提供加密和完整性驗證。如果你的加密庫支持,這是首選。

需要與 OpenSSL 命令行兼容 → 使用 CBC + PKCS7 填充,配合 Passphrase 模式。

處理流數據 / 實時加密CFBCTR

高誤碼率信道OFB

任何情況都不要用 ECB


關於 IV 和 Nonce 的通用原則

無論選擇哪種模式(ECB除外),有幾條鐵律:

  1. IV/Nonce 每次加密必須隨機生成,不能重複使用(尤其是 OFB 和 CTR 模式)
  2. IV 不需要保密,但必須隨密文一起傳輸(通常拼在密文頭部)
  3. 密鑰纔是真正需要保密的,泄露密鑰等於泄露所有加密數據
  4. 不要用固定字符串或時間戳作爲 IV,應使用密碼學安全的隨機數生成器(CSPRNG)

在線工具實踐

如果你想直接驗證本文的各種模式,可以使用 toolshu.com 提供的 AES 在線加解密工具。工具支持 CBC、ECB、CFB、CTR、OFB 五種模式,以及 Base64/Hex 兩種輸出格式,所有運算均在瀏覽器本地完成,不上傳任何數據,可以放心用於測試和驗證。

发现周边 发现周边
評論區

加載中...