使用 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
负责读取整个流并计算哈希值。
为什么在我发现的这个解决方案中没有多次使用缓冲区的循环?
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
负责读取整个流并计算哈希值。