Aes

AES-CBC 填充:為什麼總是附加 16x 0x10 填充?

  • January 21, 2019

為什麼即使最後一個塊已經是塊長度,我們也必須始終附加一個 16x 0x10 墊?

您正在談論PKCS#7 padding。原因很簡單;假設當最後一個塊已滿並且您在加密之前不應用填充然後發送消息。

解密時,接收方需要查看填充模式以移除填充。如果最後一個字節是01消息怎麼辦?是填充還是消息本身?同樣,如果最後一個字節是0202,則以低機率相同,依此類推。

10取而代之的是,用額外的純文字塊填充可以解決問題。


如果事先知道明文大小,則沒有理由執行這種特殊類型的填充。如果可以通過其他方式確定明文的大小,也可能不需要。例如,ASCII 編碼文本通常不包含設置為零的字節,因此如果文本不是塊大小的倍數,則可以使用零字節填充。然而,PKCS#7 填充始終可以確定地刪除,而與消息的內容無關

許多模式,尤其是流媒體模式,如流行的 CTR(計數器)模式和衍生模式——如經過身份驗證的 GCM 模式——根本不需要填充;它們對明文字節而不是明文塊進行操作。

引用自:https://crypto.stackexchange.com/questions/66646