更改文件的哈希值

3
我有一个文件夹,里面装满了二进制文件,我想对这些文件做出更改,以便更改这些文件的哈希值。我希望这样做不会使文件受到实质性的破坏。也就是说,更改后的文件仍应能够正常运行,或者在任意时间点上我都可以撤消更改。
有人知道我可以使用哪个脚本来完成此操作,或者是否有程序可以自动化此过程吗?
更新:
这是一个我想要处理的边缘情况。我有一个系统,只允许我存储给定哈希的文件一次。因此我想更改文件的内容哈希值以允许存储该文件。请注意,所涉及的系统不是我控制或可以更改的系统。
我是否可以只向文件结尾添加一个随机的数字 1,然后再将其删除而不会破坏文件?我只是不确定如何编写脚本(即如何以这种方式修改二进制数据)。请注意,我使用的是 Windows 环境。

这些是什么类型的文件? - Thomas
如果文件已经存在于系统中,为什么还要再次存储它呢?你能否只链接到现有的文件? - Karmastan
1个回答

3
不知道文件的格式,我们无法判断。如果这些二进制文件是用某个私钥自签名的,则可能不可能改变任何单个位数而使其无效。您的哈希是否纯粹从内容计算,而不是任何其他可更改的元数据(如文件名或修改日期)?如果是这样,你可能没有什么办法。如果哈希用于检测内容更改,但你试图在不实际更改内容的情况下改变哈希,那么显然你有问题...哈希用于什么?你为什么要改变它?如果你能给我们更多关于整体情况的信息,可能会有另一种替代方案。一种替代方案是有效地创建自己的容器格式——因此,当文件存储在您的容器格式中时,它不能以原始形式使用,但可以轻松提取。您的容器可以简单到“在末尾添加四个字节作为种子来干扰哈希”——“提取”文件只需要复制它并删除最后四个字节。但重要的是,最终得到的不是MP3文件或任何你开始的东西——它是你的自定义格式,虽然它很简单。每次与存储交互时都需要打包/提取文件。

如果它们不是自签名的......就像大多数媒体文件,例如mp3或avi文件呢?如果是未经签名的dll文件或word文档,这会改变很多吗? - webwalkerant
@WebWalkerAnt:你需要对每个需要支持的二进制文件格式有相当多的信息 - 基本上,你需要找到一个可以在不改变内容“显著”的情况下修改的文件的一部分。有些可能很容易,有些可能很难,有些可能根本不可能。我个人会寻找另一种方法,而不是走这条路。 - Jon Skeet
@jon 我能不能在文件末尾添加一个随机的1,然后再将其删除而不会破坏任何东西? - webwalkerant
@expedient 是因为ID3标签是文件内容的一部分吗? - webwalkerant
@WebWalkerAnt:是的,你可以在文件末尾添加一个1,然后再将其删除...但是,在额外数据存在时,不能保证它是相关类型的有效文件。 - Jon Skeet
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接