用过AES加密吗,为啥加密后文件会变长?

okgoood 2012-03-21 10:48:11
我用InputStream读入一个31字节的文件,然后用AES加密,就变成了32字节,为啥文件会变长呢?
就算我把buffer扩大到1024字节,还是会有这样的问题。
...全文
8500 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
smarteyeexit 2013-01-08
  • 打赏
  • 举报
回复
如果你不指定填充及加密模式的话,将会采用 ECB 模式和 PKCS5Padding 填充进行处理。 AES 是块加密,块的长度是 16 个字节,如果原文不到 16 个字节,则需要填充至 16 个字节后再进行处理。 AES 密文长度 = (原文长度 / 16) * 16 + 16 这里的“/”表示整除 顶
  • 打赏
  • 举报
回复
如果你想密文与原文长度一样的话,就不能使用块加密算法,需要使用流加密算法,比如 RC4 算法
  • 打赏
  • 举报
回复
如果你不指定填充及加密模式的话,将会采用 ECB 模式和 PKCS5Padding 填充进行处理。

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

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

这里的“/”表示整除
dreamhyz 2012-03-21
  • 打赏
  • 举报
回复
超过16字节,试试分段加密下~~
okgoood 2012-03-21
  • 打赏
  • 举报
回复
为啥加密后总会多一个字节?
okgoood 2012-03-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bao110908 的回复:]

如果你不指定填充及加密模式的话,将会采用 ECB 模式和 PKCS5Padding 填充进行处理。

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

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

这里的“/”表示整除
[/Quote]
不错,大神果然啥都知道啊
btpka3 2012-03-21
  • 打赏
  • 举报
回复
1. 对称加密(比如AES)加密后的结果都是一个某个数(比如128bit=16字节)的整倍数。
2. 对称加密(比如AES)大部分都是分块加密的。比如你加密1个字节和加密2个字节的结果长多都是一样的。
因为都没有超过加密最小块的大小,如果不足,会自动填充的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧