使用 .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/