Мне нужно рассчитать контрольные суммы довольно больших файлов (гигабайт). Это можно сделать, используя следующий метод:
private byte[] calcHash(string file)
{
System.Security.Cryptography.HashAlgorithm ha = System.Security.Cryptography.MD5.Create();
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
byte[] hash = ha.ComputeHash(fs);
fs.Close();
return hash;
}
Тем не менее, файлы, как правило, записываются заранее в буферизованном виде (скажем, написание 32 МБ за раз). Я настолько убежден, что увидел переопределение хеш-функции, которое позволило мне вычислять хеш-код MD5 (или другой) одновременно с записью, то есть: вычислять хеш-код одного буфера, а затем передавать полученный хеш-код в следующую итерацию. .
Примерно так: (псевдокод-иш)
byte [] hash = new byte [] { 0,0,0,0,0,0,0,0 };
while(!eof)
{
buffer = readFromSourceFile();
writefile(buffer);
hash = calchash(buffer, hash);
}
хеш теперь является силилированным к тому, что было бы достигнуто, если запустить функцию calcHash для всего файла.
Теперь я не могу найти никаких переопределений, подобных этому, в .Net 3.5 Framework, я мечтаю? Этого никогда не было, или я просто отвратительный в поисках? Причина одновременного выполнения записи и вычисления контрольной суммы заключается в том, что это имеет смысл из-за больших файлов.