我可以压缩encryption文件吗?

我有一个encryption的文件(AES对称encryption)。为了备份和节省磁盘空间,我可以压缩(无损)的文件,而不必担心搞乱解密? 如果是这样,你能推荐一些好的压缩程序来达到这个目的吗?

您可以压缩它,但不太可能节省太多的磁盘空间。 就其性质而言,encryption很less会使文件变得非常可压缩。

自己试试,看看是否有任何文件大小的节省。

一个数据点:

-rw-r----- 1 gene gene 2428671 2009-06-02 12:39 test.log -rw-r----- 1 gene gene 134524 2009-06-02 12:39 test.log.bz2 -rw-r----- 1 gene gene 217162 2009-06-02 12:38 test.log.gz -rw-r--r-- 1 gene gene 263229 2009-06-02 12:47 test-AES.gpg -rw-r--r-- 1 gene gene 264833 2009-06-02 12:42 test-AES.gpg.bz2 -rw-r--r-- 1 gene gene 263302 2009-06-02 12:41 test-AES.gpg.gz -rw-r--r-- 1 gene gene 134609 2009-06-02 12:43 test-bz2-AES.gpg -rw-r--r-- 1 gene gene 217246 2009-06-02 12:43 test-gz-AES.gpg 

test.log是原始文件, test.log.bz2test.log.gz分别是用bzip2和gzip压缩的。

如果我对它进行encryption( gpg --symmetric --cipher-algo AES --output test-AES.gpg test.log ),encryption文件( test-AES.gpg )略大于压缩版本。 压缩encryption文件实际上增加了一个小的尺寸( test-AES.gpg.bz2test-AES.gpg.gz )。

首先压缩然后encryption确实显示了一些节省( test-bz2-AES.gpgtest-gz-AES.gpg ),特别是使用bzip2。

当然,由于不同的encryption软件和/或不同的压缩软件,您的体验可能会有所不同。

您应该考虑通过encryption获得的文件大小节省是否足够,或者如果压缩,然后encryption值得在过程中的额外步骤。

不是如果encryption是好的。 压缩涉及识别数据中的模式,并创build一个“简写”来引用这些模式以供以后提取。

如果你的encryption是好的,那么这个文件看起来像是随机噪声,而且由于没有模式,这个文件不会被压缩太多。 当然,你可以把它放到一个档案文件(.zip,.gz等)中,但是你不可能使它变得更小。

压缩程序不会以任何方式修改实际的数据 – 如果他们这样做,他们将是无用的。 (声音和图像压缩是一个例外,因为人的眼睛看不到这么小的变化,而计算机可能窒息一个翻转的位。)所以是的,你可以压缩encryption的文件。

但是由于encryption的数据与随机数据非常相似,所以它不能很好地压缩 – 所以如果可以的话,在encryption之前进行压缩。 否则,“压缩”将是相当无用的。

对于压缩程序,Unix世界倾向于使用targzip / bzip2 (通常在tar中使用,如tar czf foo.tar.gz foo ),而Windows用户更喜欢ZIP , RAR或7z 。

使用任何压缩程序(7z,zip,gzip,bzip2)是无损的,不会影响您解密数据的能力。

但是,由于encryption数据的性质,您可能无法从中获得太多收益。

正确的做法是在encryption步骤之前对其进行压缩。 现有的工具,如gpg做到这一点。 在encryption之前压缩的行为是默认的:

 michael:~> dd if=/dev/zero of=testfile bs=1048576 count=1 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.00300552 s, 349 MB/s michael:~> gpg --symmetric --cipher-algo aes --batch --passphrase cheesestring testfile michael:~> ls -al testfile testfile.gpg -rw-r--r-- 1 michael users 1048576 2009-06-02 12:42 testfile -rw-r--r-- 1 michael users 1123 2009-06-02 12:43 testfile.gpg 

encryption文件将失去使压缩工作的统计属性,因此,压缩encryption文件将节省很less的空间。 在encryption压缩文件之前,您应该首先压缩文件(虽然压缩的方式仍然行得通)。 除此之外,压缩时不会影响文件的原始内容。

encryption后可以压缩的文件在定义上是不encryption的。 也许这是“混乱”或“混淆”。 encryption数据与随机数据无法区分。

在进行encryption之前不先压缩文件的encryption软件是一种疏忽行为。

您可以通过无损压缩algorithm运行encryption文件而不破坏数据。 这是压缩的保证 – 无论您将其作为input提供给它的任何数据都将被恢复为解压缩的输出。 根据定义,如果压缩和解压缩,无损压缩algorithm会将任何数据返回给您。

通常在这种情况下,首先进行压缩,然后进行encryption,这样可以获得更好的压缩比率。

是的,它不应该引起任何问题。 就encryption程序而言,它只是数据。 但是,很难恢复数据,因此在创build归档后可能需要使用PAR2。

我认为平衡的空间,你将节省的金额将不值得它会造成的潜在问题。

当然,这将取决于您使用的是什么操作系统,您的文件是本地还是networking,您正在做什么types的备份,您使用什么encryption以及您使用什么types的文件。

主要的问题将是访问速度,因为你将不得不先解压然后解密,文件是大还是小,它将添加进程。 你也将通过添加stream程来增加失败的风险。

最后要记住,你的解密软件将要解密一个未压缩的文件,所以你最终可能会同时存在一个压缩的和未压缩的版本,这将需要两倍的磁盘空间。

对于那些说encryption之前应该压缩的人来说,这个不太安全的原因是因为“已知的明文攻击”。 如果有人知道你在encryption之前用gzip压缩你的数据,这意味着他们已经知道了你的明文的第一部分字节,因为它将是gzip头部。 从这里他们有更多的立足点来破解你的encryption数据。

与往常一样,没有完美的安全性,先encryption对于大多数用途来说可能是完美的,但仅仅只是在encryption之前,它使得它不太安全的压缩。

对于喜欢这类东西的人们,我正在撰写一些关于密码学基础知识(针对程序员和其他技术人员)的文章:

http://blog.demofox.org/category/cryptography/