如何散列文件的前N个字节?

Dan*_*Dan 3 .net c# hash

使用.net,我希望能够散列潜在大文件的前N个字节,但我似乎无法找到一种方法.

ComputeHash函数(我使用SHA1)接受一个字节数组或一个流,但是一个流似乎是最好的方法,因为我不希望将一个可能很大的文件加载到内存中.

需要明确的是:如果我可以提供帮助,我不想将大量数据加载到内存中.如果文件是2GB,我想要散列第一个1GB,那就是很多内存!

Lee*_*Lee 6

您可以使用CryptoStream散列大量数据 - 这样的事情应该有效:

var sha1 = SHA1Managed.Create();

FileStream fs = \\whatever
using (var cs = new CryptoStream(fs, sha1, CryptoStreamMode.Read))
{
    byte[] buf = new byte[16];
    int bytesRead = cs.Read(buf, 0, buf.Length);
    long totalBytesRead = bytesRead;

    while (bytesRead > 0 && totalBytesRead <= maxBytesToHash)
    {
        bytesRead = cs.Read(buf, 0, buf.Length);
        totalBytesRead += bytesRead;
    }
}

byte[] hash = sha1.Hash;
Run Code Online (Sandbox Code Playgroud)