使用.net,我希望能够散列潜在大文件的前N个字节,但我似乎无法找到一种方法.
ComputeHash函数(我使用SHA1)接受一个字节数组或一个流,但是一个流似乎是最好的方法,因为我不希望将一个可能很大的文件加载到内存中.
需要明确的是:如果我可以提供帮助,我不想将大量数据加载到内存中.如果文件是2GB,我想要散列第一个1GB,那就是很多内存!
您可以使用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)
| 归档时间: |
|
| 查看次数: |
1484 次 |
| 最近记录: |