Мне нужно рассчитать контрольные суммы довольно больших файлов (гигабайт). Это может быть выполнено с использованием следующего метода:
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 во всем файле.
Теперь, я не могу найти каких-либо переопределений, подобных этому в Framework 3.5 Framework, мне снится? Разве это никогда не существовало, или я просто отвратителен при поиске? Причина одновременного вычисления и записи и контрольной суммы заключается в том, что это имеет смысл из-за больших файлов.