2016-11-10 321 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指出作爲標籤的問題,是使非常困難,或幾乎是不可能的。