用C#计算大文件的MD5SUM
我正在使用以下代码来计算文件的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我建议使用替代方法:
只需传入在文件上打开的输入流。 这种方法几乎肯定不会一次性读取内存中的整个文件。
我还要指出的是,在 MD5 的大多数实现中,可以一次将一个块的
byte[]
数据添加到摘要函数中,然后在最后请求哈希值。I suggest using the alternate method:
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.