AES / CBC和AES / ECB加密后的数据大小

我想知道AES加密后的数据大小,这样我就可以避免主要出于了解大小而缓存我的后AES数据(在磁盘或内存上)。

我使用128位AES javax.crypto.Cipherjavax.crypto.CipherInputStream进行加密。

使用各种输入大小执行的一些测试表明,如下计算的后期加密大小是正确的:

long size = input_Size_In_Bytes; 

long post_AES_Size = size + (16 - (size % 16));

但是我不确定以上公式是否适用于所有可能的输入大小。

在应用AES加密后,是否有一种方法可以计算数据的大小-事先无需缓存(磁盘或内存中的)加密数据即可知道其加密后的大小?

回答:

AES与密钥大小无关地具有16字节的固定块大小。假设您使用PKCS 5/7填充,请使用以下公式,

 cipherLen = (clearLen/16 + 1) * 16;

请注意,如果明文是块大小的倍数,则需要一个全新的块进行填充。假设您的明文为16个字节。密文将占用32个字节。

您可能需要使用密文存储IV(初始向量)。在这种情况下,您需要为IV增加16个字节。

以上是 AES / CBC和AES / ECB加密后的数据大小 的全部内容, 来源链接: utcz.com/qa/428437.html

回到顶部