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

解决方案 »

  1.   

    如果你不指定填充及加密模式的话,将会采用 ECB 模式和 PKCS5Padding 填充进行处理。AES 是块加密,块的长度是 16 个字节,如果原文不到 16 个字节,则需要填充至 16 个字节后再进行处理。AES 密文长度 = (原文长度 / 16) * 16 + 16这里的“/”表示整除
      

  2.   

    1. 对称加密(比如AES)加密后的结果都是一个某个数(比如128bit=16字节)的整倍数。
    2. 对称加密(比如AES)大部分都是分块加密的。比如你加密1个字节和加密2个字节的结果长多都是一样的。
    因为都没有超过加密最小块的大小,如果不足,会自动填充的。
      

  3.   

    如果你不指定填充及加密模式的话,将会采用 ECB 模式和 PKCS5Padding 填充进行处理。AES 是块加密,块的长度是 16 个字节,如果原文不到 16 个字节,则需要填充至 16 个字节后再进行处理。AES 密文长度 = (原文长度 / 16) * 16 + 16这里的“/”表示整除