【发布时间】:2011-03-12 14:03:30
【问题描述】:
我正在写一些东西,通过散列文件内容的样本来总结文件系统中的文件。它构造了一个目录和文件树。每个文件条目都有文件内容的哈希值。对于每个目录条目,我想存储目录中所有文件内容的哈希,包括子目录中的文件 - 我将其称为目录内容哈希。
目录内容哈希的棘手之处在于我希望它独立于目录的结构。 IE。如果两个目录包含相同的文件,但使用不同的子目录结构组织,则哈希应该相同。
我能想到的唯一两种方法是:
计算所有文件内容哈希的串联的 MD5。为了获得所需的哈希属性,我必须列出目录中的所有文件,按它们的哈希排序,连接排序的哈希,然后在连接上运行 MD5。这似乎比我想要的要慢。在计算整个树中的目录内容哈希时,我可以通过使用合并排序非常有效地进行排序,但是我无法绕过在大型输入上计算大量 MD5 哈希。
使用 XOR 组合文件内容哈希。每个目录只需要对其直接子级的文件内容哈希和目录内容哈希进行异或。这是非常快速和简单的,但不是很耐碰撞。它甚至无法区分包含 1 个文件实例的目录和包含同一文件的三个实例的目录。
如果有一个函数可以使用类似于方法#2 中使用的异或的方式,那就太好了,但更耐碰撞。我认为方法#1对于这种特定情况来说已经足够快了,但是为了探索所有选项/智力好奇心/未来应用程序,我想知道是否有满足描述的功能标题(我对过去几次想要这样的功能有一个模糊的记忆)。
谢谢。
【问题讨论】:
标签: hash