45

我想为软件产品添加 AES 加密,但担心会增加数据的大小。我猜数据的大小确实会增加,然后我必须添加一个压缩算法来补偿。

4

7 回答 7

58

AES 不扩展数据。此外,输出通常不可压缩;如果您打算压缩数据,请在加密之前执行此操作。

但是,请注意 AES 加密通常与padding结合使用,这增加数据的大小(尽管只有几个字节)。

于 2008-09-18T15:14:24.563 回答
25

AES 不扩展数据,除了最后一个块末尾的几个字节填充。

无论如何,生成的数据是不可压缩的,因为它们基本上是随机的——没有基于字典的算法能够有效地压缩它们。最佳做法是先压缩数据,然后再加密。

于 2008-09-18T15:16:29.037 回答
11

在加密之前压缩数据是很常见的。之后压缩它不起作用,因为 AES 加密数据看起来是随机的(对于任何好的密码,除了任何标头和诸如此类的东西)。

但是,压缩在某些情况下会引入侧信道攻击,因此您必须分析自己的使用情况。最近报告了针对加密 VOIP 的此类攻击:要点是不同的音节在使用 VBR 压缩时会产生比特率的特征变化,因为有些声音比其他声音压缩得更好。因此,一些(或所有)音节可以通过充分的分析来恢复,因为数据是以它生成的速率传输的。解决方法是使用(效率较低的)CBR 压缩,或者使用缓冲区以恒定速率传输,而不管来自编码器的数据速率如何(增加延迟)。

AES 将 16 字节输入块转换为 16 字节输出块。唯一的扩展是将数据四舍五入到整数个块。

于 2008-09-18T15:31:47.487 回答
4

我相当肯定 AES 加密不会对被加密的数据添加任何内容,因为这会泄露有关状态变量的信息,而这对于密码学来说是一件坏事。

如果您想混合压缩和加密,请按此顺序进行。原因是加密数据(理想情况下)看起来像完全随机的数据,并且压缩算法最终会使数据变得更大,因为它无法实际压缩任何数据以及任何压缩文件格式附带的簿记开销。

于 2008-09-18T15:15:59.960 回答
0

如果需要压缩,请在加密之前进行。

于 2008-09-18T15:16:24.827 回答
0

不会。唯一的变化是少量的填充以将数据与块的大小对齐

但是,如果您正在压缩内容,请注意您应该在加密之前执行此操作。加密数据通常应该与随机数据无法区分,这意味着它不会压缩。

于 2008-09-18T15:18:08.520 回答
0

@freespace 和其他人:我从我的密码学课程中记得的一件事是,您不应该在加密之前压缩您的数据,因为一些可重复的压缩流块(例如部分标题)可能会更容易破解您的加密。

于 2008-09-18T15:23:48.363 回答