为什么在这个洗脱液中我发现没有循环使用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校验和。它应该如何?
答案 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
负责读取整个流并计算哈希值。