2009-12-13 67 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的答案。