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

时间:2011-11-30 20:47:32

标签: c cryptography openssl

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

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

但加密缓冲区的大小总是那么大吗?它还可以“更小”吗?

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

由于

2 个答案:

答案 0 :(得分:3)

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

即。最多一个完整的块(AES的16个字节)将被追加。

n + AES_BLOCK_SIZE总是足够(在某些情况下已经足够了),但您可以更准确地计算n + AES_BLOCK_SIZE - (n % AES_BLOCK_SIZE)

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

答案 1 :(得分:1)

AES是"阻止"加密。它具有128位块大小。这意味着它始终将128位块(16字节)作为输入,并始终输出相同大小的块。

如果您的输入不是16字节的倍数,则应附加一些数据(可能是包含零值的字节)以将其四舍五入。

如果您的数据超过16个字节,您将加密多个块,并且需要多次调用您的AES加密函数。

如果您只为输出分配空间,malloc(AES_BLOCK_SIZE);将是您寻求的分配。不要添加输入大小或减去一个字节。