1

我从 python 中的文本文件创建了一个加密文件。粗壮的使用 pycrypto。

所以我的源文本文件是 33742 字节,加密版本是 33752。到目前为止还可以,但是......

当我用 tar -czvf 压缩 test.enc (加密的测试文件)时,最终文件是 33989 字节。为什么源文件加密后压缩不起作用?

到目前为止,唯一的选择似乎是先压缩它然后加密它,因为文件保持那么小。

4

2 回答 2

7

压缩通过识别数据中的模式来工作。由于您无法识别加密数据中的模式(这就是重点),因此您无法对其进行压缩。

对于产生 33,742 字节输出的完美加密算法,理想情况下,您能够确定的关于解密的原始数据的全部内容是它可以容纳 33,742 字节,但仅此而已。如果您可以将其压缩到 31,400 字节,那么您会立即知道输入数据不是 32,000 字节的随机数据,因为随机数据是无模式的,因此不可压缩。这将表明加密方案的一部分失败。解密的数据是否随机无关紧要。

于 2012-11-24T18:12:11.417 回答
1

tar -z 使用的压缩方法依赖于输入文件中的重复模式,将这些模式替换为模式重复次数的计数(非常简化)。

但是,当您加密文件时,您基本上是在尝试将任何重复模式隐藏在尽可能多的“随机”噪声中。这使您的文件几乎不可压缩。将其与存档和压缩文件格式(元数据等)的开销相结合,您的文件实际上最终会稍微大一些。

你应该扭转这个过程;首先压缩,然后加密,您将大大增加最终获得较小有效负载的机会。

于 2012-11-24T18:13:25.877 回答