用C#计算大文件的MD5SUM

发布于 2024-07-17 14:00:45 字数 352 浏览 10 评论 0原文

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

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

这通常工作正常,但如果我遇到大文件(~1GB) - 例如 iso 映像或 DVD VOB 文件 - 我会收到内存不足异常。

不过,我能够在大约 10 秒内计算出 cygwin 中同一文件的 MD5SUM。

请建议我如何让它适用于我的程序中的大文件。

谢谢

I am using following code to compute MD5SUM of a file -

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

This works fine normally, but if I encounter a large file (~1GB) - e.g. an iso image or a DVD VOB file - I get an Out of Memory exception.

Though, I am able to compute the MD5SUM in cygwin for the same file in about 10secs.

Please suggest how can I get this to work for big files in my program.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笛声青案梦长安 2024-07-24 14:00:45

我建议使用替代方法:

MD5CryptoServiceProvider.ComputeHash(Stream)

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

我还要指出的是,在 MD5 的大多数实现中,可以一次将一个块的 byte[] 数据添加到摘要函数中,然后在最后请求哈希值。

I suggest using the alternate method:

MD5CryptoServiceProvider.ComputeHash(Stream)

and just pass in an input stream opened on your file. This method will almost certainly not read in the whole file in memory in one go.

I would also note that in most implementations of MD5 it's possible to add byte[] data into the digest function a chunk at a time, and then ask for the hash at the end.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文