【问题标题】:Computing MD5SUM of large files in C#在 C# 中计算大文件的 MD5SUM
【发布时间】:2009-04-30 07:11:25
【问题描述】:

我正在使用以下代码来计算文件的 MD5SUM -

byte[] b = System.IO.File.ReadAllBytes(file);
string sum = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(b));

这正常工作,但如果我遇到一个大文件 (~1GB) - 例如iso 映像或 DVD VOB 文件 - 我收到 Out of Memory 异常。

不过,我可以在 cygwin 中为同一个文件在大约 10 秒内计算出 MD5SUM。

请建议我怎样才能让它适用于我程序中的大文件。

谢谢

【问题讨论】:

    标签: c# md5 hash large-files


    【解决方案1】:

    我建议使用替代方法:

    MD5CryptoServiceProvider.ComputeHash(Stream)
    

    只需传入在您的文件上打开的输入流。这种方法几乎肯定不会一次性读取内存中的整个文件。

    我还要注意,在 MD5 的大多数实现中,可以一次将 byte[] 数据添加到摘要函数中,然后在最后询问哈希。

    【讨论】:

    • 是的。 Mono 实际上通过迭代读取字节[4096] (anonsvn.mono-project.com/viewvc/trunk/mcs/class/corlib/…) 来实现 ComputeHash(Stream)。我希望 MS 的实现非常相似。通常,使用 ReadAllBytes 可能意味着您做错了什么。即使对于短文件,使用 Stream 也更加优雅。
    • 这很甜蜜。我尝试了其他帖子中关于读取内存流等的简单解决方案,但对于非常大的文件,它们似乎都失败了。这非常有效,而且非常简单。谢谢:)
    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2016-05-26
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多