2016-11-10 28 views
0

我有一个大文件需要压缩,但是我需要确保原始文件与压缩文件具有相同的哈希值。我在一个较小的文件上尝试过,散列值不同,但我认为这可能是因为元数据更改。如何确保文件在压缩后不会更改?压缩是否改变散列值?

+0

首先,如果你凑原始未压缩文件,然后散列压缩文件,那么,这些都会有不同的hashvalues。另一方面,如果您散列原始未压缩文件,然后对压缩后的内容进行哈希(即,您解压缩和散列),则不然,不同的散列将指示压缩或解压缩失败。 –

回答

0

这取决于您正在使用哪个shash。如果你使用crc32,使你的哈希值相同是非常微不足道的。 MD5可能已经可能(我不知道那里的艺术的开始),SHA1可能在几年内就可以实现。如果你使用SHA256,最好放弃。

蛇鲨约破密码放在一边,除非你的散列算法明确知道你的压缩设置或输入文件是非常精心打造挑起哈希冲突:哈希将压缩前后变化。这意味着任何标准加密哈希将在压缩时发生变化。

所有散列算法看到是位没有任何意义的流。它不知道压缩方案,不应该。

+0

我试着在它之前和之后对它们进行散列 - 哈希值结果是不同的,因此我想知道这是否可能只是由于文件的元数据不同(zip具有不同的名称和创建日期)。 – michal111

+0

你在哪个平台上?如果你在Linux/Mac/Unix设置中,最容易解释: – Matthias

+0

在'$ cat myFile | md5sum' vs'$ cat myFile | compressionProgram | md5sum“md5sum程序根本没有看到任何元数据或文件名。 – Matthias

0

如果你的散列是CRC-32,那么你可以插入或四个字节追加到压缩数据,并将这些来获得原始CRC。例如,在gzip流中,您可以在标题中插入一个四字节的额外块。

加密散列的整点,如MD5指出作为标签的问题,是使非常困难,或几乎是不可能的。