在 Windows 文件系统中,每个文件都有一个预先计算的哈希值吗?
Posted
技术标签:
【中文标题】在 Windows 文件系统中,每个文件都有一个预先计算的哈希值吗?【英文标题】:There is in Windows file systems a pre computed hash for each file? 【发布时间】:2010-12-02 04:49:26 【问题描述】:我想通过其哈希搜索文件重复。出于性能目的,我想知道 NTFS/FAT 文件系统中的每个文件是否都存储了哈希/校验和。如果有,我不必计算所有这些来搜索我的文件。
如果有,如何使用 .NET 访问它?
如果有帮助,它将是 JPEG 文件。他们有校验和吗?
【问题讨论】:
【参考方案1】:Windows 现在确实有搜索功能,如果我没记错的话,您可以为它编写自己的插件(换句话说,以自定义方式索引文件)。据推测,您可以为 JPG 编写一个插件,然后简单地调用搜索 API 来查找文件(在 Windows 进行索引之后)。
【讨论】:
我认为 Windows 索引文本(作为文件名),而不是图像。 来自msdn.microsoft.com/en-us/library/…>:索引的内容基于插件支持的文件和数据类型... Window Search 中包含的过滤器支持超过 200 种常见的数据类型包括...纯文本文件、html 等等。当然,虽然它只原生支持某些文件,但正如它所说,您可以使用自定义插件索引任何内容。当然搜索可以索引 MP3 - JPG 也不例外。 【参考方案2】:Windows 不会为每个文件存储哈希值。正如 Jader Dias 所建议的,有 EXE 和 DLL 的校验和,但这些不是您要寻找的机器人。
请注意,即使您有这样的哈希,它仍然不能保证唯一性。如果您发现两个具有相同哈希(和大小)的文件,您仍然需要比较内容以确定文件是否真正相同。
JPEG 文件可能有一些校验和或散列,但您可能也不能指望它们。
【讨论】:
+1 表示“请注意,即使您有这样的哈希,它仍然不能保证唯一性。” ...虽然确实非常小的变化几乎总是会导致唯一的哈希值,但用户有办法产生这些神奇的边缘情况。【参考方案3】:没有这样的东西。
【讨论】:
Windows 允许随机写入文件。如果每次写入都需要重新计算文件的校验和,您能想象开销吗? 我想至少 EXE 文件有一个校验和,其他类型可能有。 @MarkRansom 你可以想象它只有在被请求时才被计算,并缓存在某个地方,每次写入文件时唯一发生的事情就是缓存失效——比每次重新计算它的成本要低得多 此外,用于错误检测的哈希不需要加密安全:可以使用某种循环模式,如普通加法或 XOR;可以在不重新计算完整哈希的情况下补偿一些更改的块。以上是关于在 Windows 文件系统中,每个文件都有一个预先计算的哈希值吗?的主要内容,如果未能解决你的问题,请参考以下文章