使用 FileStream 的 +2GB 文件的 SHA 校验和

SHA checksum for +2GB file using FileStream

为什么在我发现的这个解决方案中没有多次使用缓冲区的循环?

using System.IO;
using System.Security.Cryptography;

private static string GetChecksum(string file)
{
    using (FileStream stream = File.OpenRead(file))
    {
        SHA256Managed sha = new SHA256Managed();
        byte[] checksum = sha.ComputeHash(stream);
        return BitConverter.ToString(checksum).Replace("-", String.Empty);
    }
}

我正在尝试为 +2GB 的文件生成 SHA 校验和。应该如何?

您正在使用 HashAlgorithm.ComputeHash(Stream) 覆盖。

循环在幕后。

这里是ComputeHash方法的简化源代码:

public byte[] ComputeHash(Stream inputStream) 
{
    ...
    // Default the buffer size to 4K.
    byte[] buffer = new byte[4096]; 
    int bytesRead;
    do { 
        bytesRead = inputStream.Read(buffer, 0, 4096); 
        if (bytesRead > 0) {
            HashCore(buffer, 0, bytesRead);  // Actual hashing
        }
    } while (bytesRead > 0);
    ...
}

如您所见,ComputeHash 实际上是按 4096 字节 块散列。

Why in this soulution which I found there is no Loop to use buffor few times?

因为ComputeHash负责读取整个流并计算哈希值。