2009-08-26 2 views
5

Я выполняю операцию, когда я получаю несколько байтов от компонента, выполняю некоторую обработку и затем отправляю ее следующему компоненту. Мне нужно уметь вычислять хэш всех данных, которые я видел в любой момент времени, и из-за размера данных; Я не могу хранить все это в локальном буфере.Вычислить хеш, не имея сразу всего буфера в памяти

Как бы вы вычислили хэш (MD5) в этих условиях?

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

ответ

7

Вы просто хотите использовать TransformBlock и TransformFinalBlock членов класса, которые позволяют вам вычислить хэш в кусках.

MSDN имеет хороший пример того, как это сделать.

+0

TransformBlock/TransformFinalBlock работает; но если куски, которые вы можете передать в функцию TransformFinalBlock, не имеют того же размера или больше, чем хэш, вам нужно использовать свойство HashAlgorithm.Hash, чтобы получить хэш после вызова TransformFinalBlock. – driis

+0

Ах, рад, что он работает на вас сейчас. – Noldorin

0

Его немного удивительно, что он не поставляется в коробке.

Если вы создаете MD5CryptoServiceProvider в переменной-члене и многократно вызываете ComputeHash(), не работает ли она как добавление?

+0

Нет, ComputeHash неоднократно, не работает. Подход TransformBlock/TransformFinalBlock, похоже, работает, в настоящее время я тестирую его. – driis

Смежные вопросы