如果我先使用AES加密文件,然后再使用ZLIB压缩它,那么比起先压缩再加密,压缩效率会降低吗?换句话说,我应该先压缩还是先加密呢?或者这两个步骤的顺序无所谓吗?
首先压缩文件。一旦加密文件,您将生成一系列似乎随机的数据流,这些数据将无法进行压缩。压缩过程取决于在数据中找到可压缩的模式。
如果您的加密算法很好(而且带有适当的链接模式的AES算法很好),那么没有任何压缩器能够缩小加密文本。或者,如果您喜欢另一种方式:如果您成功地压缩了一些加密文本,那么现在是时候质疑加密算法的质量了。
这是因为加密系统的输出应该与纯随机数据无法区分,即使是坚决攻击者也不行。压缩器不是恶意攻击者,但它的工作是尝试找到非随机模式,并用更少的位数表示它们。压缩器不应该能够在加密文本中找到任何这样的模式。
因此,您应该首先压缩数据,然后加密结果,而不是相反。例如,在OpenPGP格式中就是这样做的。
首先进行压缩。如果你先加密,那么你的数据就会变成(本质上)一串随机比特流。随机比特流是不可压缩的,因为压缩需要在数据中寻找模式,而根据定义,随机流没有模式。