使用FileStream对+ 2GB文件进行SHA校验和

时间:2017-11-13 14:18:51

标签: c# .net sha

为什么在这个洗脱液中我发现没有循环使用buf几次?

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校验和。它应该如何?

2 个答案:

答案 0 :(得分:0)

您正在使用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字节块进行散列。

答案 1 :(得分:0)

  

为什么在这个洗脱液中我发现没有循环使用buf几次?

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