压缩加密文件比源更大

时间:2012-11-24 18:10:33

标签: python python-2.7 pycrypto

我在python中使用文本文件创建了一个加密文件。 加利用pycrypto。

所以我的源文本文件是33742字节,加密版本是33752。 那可以,但是...

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

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

2 个答案:

答案 0 :(得分:7)

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

对于产生33,742字节输出的完美加密算法,理想情况下,您能够确定解密原始数据的所有内容是它可以容纳33,742字节,但不超过这个。如果您可以将其压缩到31,400字节,那么您会立即知道输入数据不是32,000字节的随机数据,因为随机数据是无模式的,因此是不可压缩的。这表明加密方案失败了。无论解密数据是否随机,都无人问津。

答案 1 :(得分:1)

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

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

你应该扭转这个过程;首先压缩,然后加密,你将增加你最终显着减少有效负载的机会。