我想知道AES加密后数据的大小,以便我可以避免对我的AES后数据(在磁盘或内存中)进行缓冲,主要是为了知道大小。
我使用128位AES、javax.crypto.Cipher
和 javax.crypto.CipherInputStream
进行加密。
通过对各种输入大小进行一些测试,发现以下计算得出的加密后大小是正确的:
long size = input_Size_In_Bytes;
long post_AES_Size = size + (16 - (size % 16));
但我不确定上面的公式是否适用于所有可能的输入大小。
有没有一种方法可以在加密数据之前预先计算出其大小 - 而无需缓冲加密后的数据(在磁盘或内存中)以了解其加密后的大小?
10 0F 0E ... 02 01
和填充后的明文10 0F 0E ... 02
+ 填充01
的方法。这就是为什么总是进行填充的原因。如果明文大小已知“out of band”,或者已知该值不以00
结尾(例如ASCII字符串),有时会使用零填充到块大小。 - Maarten BodewesCipher
实例以获取正确的长度。在stackoverflow上,赞数几乎没有任何作用。 - Maarten Bodewes