以编程方式更改文件的哈希值而不会破坏它

时间:2009-12-13 01:04:13

标签: php hash

有没有人有任何关于更改文件哈希值的信息而不会破坏它?

我读到了在文件末尾添加空字节,从而更改MD5而不会破坏它。有人有任何信息吗?

我希望这样做的语言是PHP。

感谢。

3 个答案:

答案 0 :(得分:6)

这取决于应用程序在读取此文件时的期望。例如,如果它是一个文本文件,您只需在其中一个段落后插入一个空格即可。这不会改变人类对文件的可读性,但会改变MD5。

同样对于基本HTML文件或源文件(如C或PHP),其间距无关紧要(只要在句法上无关紧要的区域插入空格,例如不在字符串常量内)。添加一些额外的空格或在最后添加换行符,您会发现网页的行为不会改变。

然而,这不太可能适用于可执行文件,因为它在运行时可能会崩溃并烧毁(如果它甚至加载 - 某些加载器可能会使用校验和来加载部分)。

您需要准确说明在您谈论的情况下腐败的含义。

更新

例如,在JPEG文件中,可能只需要在最后用唯一的COM部分替换EOI标记,然后使用EOI标记即可。 EOI标记是图像的结尾,您应该能够在它之前插入注释部分(带有唯一注释)。这将使每个JPEG具有不同的MD5,而stil呈现相同的图像。请参阅here

使用ZIP文件,您实际上可以在每个文件之间插入任意数据,因为最后的目录列出了具有偏移量的文件。有关详细信息,请参阅here。不幸的是,我不熟悉RAR文件的内部。

答案 1 :(得分:3)

听起来您可能最好将这些重复文件更改为符号链接ln -s otherfolder/file file(假设服务器位于* nix平台上)。

答案 2 :(得分:1)

如果您主要处理.ZIP和.RAR文件,请找到PHP的ZIP / RAR库,只需在每个zip / rar中添加一个小的随机文件。

对于JPEG,请按paxdiablo的回答。