Aes

我們可以根據明文的長度計算AES-CBC-PKCS7密文長度嗎?

  • March 10, 2019

我目前在 CBC 模式下使用 AES256 和 PKCS7 填充來加密一些數據。似乎輸出大小並不總是 2 的冪,這是我所期望的。

是否可以計算輸出的字節大小,只知道輸入數據?

PKCS7 使用強制填充。即使您的數據長度是塊大小的倍數,它也會填充。

output_size = input_size + (block_size - (input_size % block_size))

AES 是具有 128 位塊的塊密碼(無論其密鑰大小為 128、192 或 256 位);即 16 個八位字節。PKCS#7 填充從一個八位字節添加到一個完整塊。它因此轉變 $ n $ 明文的八位字節到 $ 16\lfloor n/16+1\rfloor $ 填充明文的八位字節,其中 $ \lfloor x \rfloor $ $ x $ 向下舍入為整數。等效地,填充大小為 $ n+16-(n\bmod 16) $ 八位字節。在 C(++)、Java 或 Go 中,就是(n|15)+1.

在 CBC 模式下加密時密文的大小通常較大,因為安全使用 CBC 模式需要一個 IV,通常包含在密文中,通常為 8 或 16 個八位字節。openssl enc -aes-256-cbcIV 是 8 個八位字節,但也有一個 8 個八位字節的標頭(ASCIISalted__格式)。所以最終密文比填充的明文多 16 個八位字節。同樣,這取決於程序。

在 CBC 模式下,輸出大小沒有理由是 2 的冪,而且通常不是。

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