在c中预先计算AES256加密“缓冲区”的大小

Jon*_*lli 2 c openssl cryptography

我如何计算 AES256 加密文件/缓冲区的大小。

我执行 (n + AES_BLOCK_SIZE -1) 个字节的 malloc(其中 n 是未加密的缓冲区大小)。

但是加密缓冲区的大小总是这个大小吗?也可以“更小”吗?

知道我如何预先计算确切的尺寸吗?

谢谢

Paŭ*_*ann 5

这取决于您使用的填充。最常见的填充方案(因为它是可逆的并且包含轻微的完整性检查)是 PKCS#5-padding:这会附加许多字节,使得最终大小是块大小的倍数,并且至少附加一个字节。(每个附加字节的值与附加字节数相同。)

即最多将附加一个完整块(AES 为 16 字节)。

n + AES_BLOCK_SIZE总是足够的(在某些情况下就足够了),但您可以更精确地计算它,如n + AES_BLOCK_SIZE - (n % AES_BLOCK_SIZE).

请注意,有些操作模式根本不需要填充,例如 CTR、CFB 和 OFB 模式。另请注意,您通常也希望传输初始化向量(另一个完整块)。