使用 .net,我希望能够散列潜在大文件的前 N ​​个字节,但我似乎找不到这样做的方法。

ComputeHash 函数(我使用的是 SHA1)采用字节数组或流,但流似乎是最好的方法,因为我不希望将潜在的大文件加载到内存中。

需要明确的是 :如果可以的话,我不想将潜在的大量数据加载到内存中。如果文件是 2GB 并且我想对第一个 1GB 进行哈希处理,那就是很多 RAM!

最佳答案

您可以使用 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;

关于c# - 如何散列文件的前 N ​​个字节?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3441338/

10-10 07:39