c# - 更快的 MD5 替代品?

标签 c# md5 hash

我正在开发一个在整个驱动器中搜索给定文件的程序。目前,我计算已知文件的 MD5 哈希值,然后递归扫描所有文件,寻找匹配项。

唯一的问题是 MD5 在处理大文件时速度非常慢。有没有我可以使用的更快的替代方案,同时保留非常小的误报概率?

所有代码都在 C# 中。

谢谢。

更新

我读到过即使是 MD5 也可以非常快并且磁盘 I/O 应该是限制因素。这让我相信我的代码可能不是最优的。这种方法有什么问题吗?

        MD5 md5 = MD5.Create();
        StringBuilder sb = new StringBuilder();
        try
        {
            using (FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.Read))
            {
                foreach (byte b in md5.ComputeHash(fs))
                    sb.Append(b.ToString("X2"));
            }
            return sb.ToString();
        }
        catch (Exception)
        {
            return "";
        }

最佳答案

我希望您仅在文件大小已经匹配时才检查 MD5 匹配。

另一个优化是对前 1K(或其他一些任意但相当小的数字)进行快速校验,并在处理整个文件之前确保它们匹配。

当然,所有这些都假设您只是在寻找特定文件的匹配/不匹配决策。

关于c# - 更快的 MD5 替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/288732/

相关文章:

c# - 发布输出文件夹中的程序调试数据库文件

md5 - MySQL Workbench MD5列-如何?

.net - 在 VB.NET 中是否有用于执行不安全算术的实用方法?

c# - 如何在 Fluent Assertions 中指定用于检查字典的键和值比较器?

c# - 不指定 XmlRootAttribute 的 XML 反序列化

c# - SQL 和 C# 中两个日期计算之间的日期差异产生不同的结果

java - MD5 在 PHP 和 JAVA 中给出不同的结果

c# - 散列非 ascii 字符 C#

perl - 在 perl 中过滤散列的散列

javascript - 使用哈希 url 卡在 Angular ui-router State.go 上?