日期:2014-05-20  浏览次数:23375 次

用过AES加密吗,为啥加密后文件会变长?
我用InputStream读入一个31字节的文件,然后用AES加密,就变成了32字节,为啥文件会变长呢?
就算我把buffer扩大到1024字节,还是会有这样的问题。

------解决方案--------------------
超过16字节,试试分段加密下~~
------解决方案--------------------
如果你不指定填充及加密模式的话,将会采用 ECB 模式和 PKCS5Padding 填充进行处理。

AES 是块加密,块的长度是 16 个字节,如果原文不到 16 个字节,则需要填充至 16 个字节后再进行处理。

AES 密文长度 = (原文长度 / 16) * 16 + 16

这里的“/”表示整除
------解决方案--------------------
如果你想密文与原文长度一样的话,就不能使用块加密算法,需要使用流加密算法,比如 RC4 算法
------解决方案--------------------
1. 对称加密(比如AES)加密后的结果都是一个某个数(比如128bit=16字节)的整倍数。
2. 对称加密(比如AES)大部分都是分块加密的。比如你加密1个字节和加密2个字节的结果长多都是一样的。
因为都没有超过加密最小块的大小,如果不足,会自动填充的。