Как эффективно реализовать проверку хеш-файлов при использовании BinaryWriter & Reader? - PullRequest
2 голосов
/ 03 ноября 2011

Я относительно новичок в C #, поэтому, пожалуйста, потерпите меня.

Я пишу небольшое приложение на C # (.NET 4.0).Для записи файлов я использую некоторые варианты этого кода:

using (var fStream = new FileStream(filename, FileMode.CreateNew, FileAccess.Write, 
 FileShare.Read))
using (var crypto = new CryptoStream(fStream, encryptor, CryptoStreamMode.Write))
using (var binary = new BinaryWriter(crypto))

Я бы хотел убедиться, что файлы не повреждены и не подделаны.Таким образом, я подумал об использовании sha256 или hmac с sha256 (если он не намного медленнее). Я не знаю, как эффективно реализовать хеширование содержимого файла .

Мои идеи на данный момент таковы:

1.) Hmac.ComputeHash (stream) - но он не работает в двоичном потоке - если я использую файловый поток, я не знаю, какие частипотока, который он хэширует, потому что я хочу добавить хеш в конец файла.Таким образом, я не знаю при чтении, как хэшировать файловый поток без хэширования добавленного хеша.

2.) Использовать двоичный поток для чтения / записи в / из потока памяти, а затем вызывать memory.ToArray () и хэшировать, чтоМассив байтов - я думаю, что это довольно неэффективно

Что мне делать?

Спасибо за ваши идеи и ответы.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Все HashAlgorithm s реализуют ICryptoTransform.

Вы можете просто прочитать другой CryptoStream вокруг алгоритма HashAlgorithm, а затем проверить его хэш после того, как закончите чтение.

1 голос
/ 22 февраля 2012

Я в конечном итоге использую это:

  1. двоичный поток для чтения / записи в память
  2. преобразование потока памяти в байтовый массив
  3. хеш байтового массива
...