aes-encryption.com
繁體中文

AES · GCM / CBC / CTR

AES 填充:PKCS7、GCM 與 CTR

瞭解 CBC 的 PKCS7 填充、GCM/CTR 為什麼不需要它,以及填充報錯為何不是認證結果。

填充屬於模式的訊息處理規則

AES 分組大小為 16 位元組。CBC 需要完整分組,本工具採用 PKCS7;GCM 與 CTR 不需要 PKCS7 就能處理最後的不完整分組。不要因為其他庫的介面有填充選項,就在所有模式上增加填充。

密碼模式固定 GCM,沒有 PKCS7。原始 CBC 明確使用 PKCS7;目標如果使用零填充或不填充,並不會自動與本工具相容。

位元組級例子

13 位元組訊息的 PKCS7 會追加三個值為 03 的位元組,形成 16 位元組分組。如果原文已正好 16 位元組,則追加整組十六個十六進位制 10 位元組值,使去除填充有明確定義。

原始 CBC 輸入 abc 為三個 UTF-8 位元組,會在加密前自動追加十三個 0d。正確解密並移除 PKCS7 後還原原來的三個位元組。不要在編輯器裡手動再加一遍填充。

報錯能說明什麼

錯誤金鑰、IV、模式、密文變化和不同填充約定都可能報錯;錯誤不會指出唯一原因。錯誤金鑰得到的隨機位元組也偶爾可能碰巧符合填充,所以移除成功不等於明文通過認證。

GCM 的失敗是認證不匹配,不釋放明文。不要把損壞的 GCM 包切換到 CBC 來繞過保護。CTR 沒有填充校驗,可能直接返回位元組,同樣不能證明完整性。

不要靠刪改原文排錯

確認密文解碼正確、CBC IV 為 16 位元組、金鑰長度與選項一致,並保留原訊息所需的尾部換行。如果對方使用另一填充約定,應使用對應實作,不要自行刪零或猜測該丟棄多少明文。

相關工具與閱讀

技術參考

更新於 2026 年 10 月 16 日

常見問題

16 位元組原文為什麼多出一個 CBC 分組?

PKCS7 在原文已對齊時會追加完整的 16 位元組填充分組,這是正常規則,並非重複明文。

CBC 填充成功能證明金鑰正確嗎?

不能。填充是格式檢查,不是訊息認證;還需適當的認證協定和可信上下文。