我想将AES加密添加到软件产品中,但我担心的是增加数据的大小。我猜测数据确实增加了,然后我将不得不添加一个压缩算法来补偿。
答案 0 :(得分:45)
AES不会扩展数据。而且,输出通常不是可压缩的;如果您打算压缩数据,请在加密之前执行此操作。
但请注意,AES加密通常与padding结合使用, 会增加数据的大小(尽管只需几个字节)。
答案 1 :(得分:23)
AES不会扩展数据,除了最后一个块末尾的几个填充字节。
结果数据无论如何都是不可压缩的,因为它们基本上是随机的 - 没有基于字典的算法能够有效地压缩它们。最佳做法是先压缩数据,然后对其进行加密。
答案 2 :(得分:7)
在加密之前压缩数据是很常见的。之后压缩它不起作用,因为AES加密数据看起来是随机的(对于任何好的密码,除了任何标题和诸如此类别之外)。
但是,压缩会在某些情况下引入旁道攻击,因此您必须分析自己的使用情况。最近针对加密的VOIP报告了这种攻击:要点是不同的音节在用VBR压缩时会产生比特率的特征变化,因为有些声音比其他声音压缩得更好。因此,一些(或所有)音节可以通过充分的分析来恢复,因为数据是以其生成的速率传输的。修复是要么使用(效率较低)CBR压缩,要么使用缓冲区以恒定速率传输,而不管编码器输出的数据速率如何(增加延迟)。
AES将16字节输入块转换为16字节输出块。唯一的扩展是将数据四舍五入到整数个块。
答案 3 :(得分:4)
我很确定AES加密不会对正在加密的数据添加任何内容,因为这会泄露有关状态变量的信息,这在加密方面是个坏事。
如果要混合压缩和加密,请按顺序执行。原因是加密数据(理想情况下)看起来像是完全随机的数据,并且压缩算法最终会使数据变大,因为它无法实际压缩任何数据和任何压缩文件格式附带的簿记开销。
答案 4 :(得分:0)
如果需要压缩,请在加密前进行压缩。
答案 5 :(得分:0)
没有。唯一的变化是使用少量填充来将数据与块的大小对齐
但是,如果要压缩内容备注,则应在加密之前执行此操作。加密数据通常与随机数据无法区分,这意味着它不会压缩。
答案 6 :(得分:0)
@freespace和其他人:我在密码学课程中记得的一件事就是你不应该在加密之前压缩你的数据,因为一些可重复的压缩流块(比如节目标题)可能会让你更容易破解你的数据加密。