2009-12-13 28 views
0

有沒有人有更改文件的散列而不會破壞它的任何信息?以編程方式更改文件的散列而不損壞文件

我讀了關於在文件末尾附加一個空字節,從而改變MD5而不會破壞它。任何人有任何信息?

我希望這樣做的語言是PHP。

謝謝。

+12

接受一些答案 – 2009-12-13 01:07:17

+0

你在說什麼哈希(MD5?)?你爲什麼需要這個? – ChristopheD 2009-12-13 01:08:35

+0

是的,MD5。我需要它,因爲託管我的網絡服務器的人想要刪除重複文件,這就是他如何檢查它們。我只是想採取反對行動。 :) – Joseph 2009-12-13 01:09:49

回答

6

這取決於應用程序在讀取此文件時的期望值。例如,如果它是一個文本文件,您可以簡單地在其中一個段落之後插入一個空格。這不會改變人類對文件的可讀性,但它會改變MD5。

對於基本的HTML文件或源文件(例如C或PHP),間距無關緊要(只要將空格插入語法無關緊要的區域,例如不在字符串常量內)。在最後加入一些額外的空格或添加換行符,您會發現網頁的行爲不會改變。

但是,這對於可執行文件來說不太可能工作,因爲它在運行時可能會崩潰並燒燬(如果確實它加載 - 某些加載器可能會對加載部分使用校驗和)。

您需要明確指出在您談論的情況下,腐敗意味着什麼。

更新:

例如,在JPEG文件,它可能是在一個獨特的COM節,後面的EOI標識結束更換EOI標記的一個簡單的事情。 EOI標記是圖像的結尾,您應該能夠在它之前插入註釋部分(帶有獨特的註釋)。這將使每個JPEG具有不同的MD5,而stil呈現相同的圖像。見here

使用ZIP文件時,實際上可以在每個文件之間插入任意數據,因爲最後的目錄會用偏移量列出文件。詳情請參閱here。不幸的是,我不熟悉RAR文件的內部。

+0

對不起,大部分文件都是.ZIP和.RAR,並帶有一些.jpegs文件。 – Joseph 2009-12-13 01:12:44

3

聽起來像你可能會更好,只是將這些重複的文件更改爲符號鏈接ln -s otherfolder/file file(假設服務器是在* nix平臺上)。

+0

現在這是一個很好的答案! – 2009-12-13 06:57:19

1

如果您主要處理.ZIP和.RAR文件,請爲PHP找到一個ZIP/RAR庫,並且只需在每個zip/rar中添加一個小型隨機文件即可。

對於JPEG,請按照paxdiablo的答案。