计算大文件的MD5哈希值

3

我希望能让事情更加清晰简单。如果我有1GB的内存,并且尝试计算一个2GB文件的MD5哈希值,该怎么办?目前,我的处理方式是:

private static string Md5Hash(byte[] input)
{
    byte[] hash = MD5.Create().ComputeHash(input);
    StringBuilder builder = new StringBuilder(32);
    foreach(byte b in hash)
    { builder.Append(b.ToString("X2")); }
    return builder.ToString();
}

// I'm using it like: 'Md5.AsString(File.ReadAllBytes(filePath))'

那么你有什么建议?

1个回答

6

不要在将文件完全加载到内存后计算其哈希值,而应使用接受 Stream 参数的重载方法。

byte[] hash;
using (Stream input = File.OpenRead("Filename"))
{
    hash = MD5.Create().ComputeHash(input);
}

那么,它不会让整个内存崩溃,对吧?使用缓冲流进行实时哈希计算?这似乎很清晰 :) - PilawyerDev
@PilawyerDev 这就是为什么他在这里使用 File.OpenRead 而不是 File.ReadAllBytes - Cheng Chen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接