Могу ли я просто передать значение NULL в качестве параметра "выходной буфер" HashAlgorithm.TransformBlock()?

HashAlgorithm.TransformBlock() имеет outputBuffer параметр, который задокументирован как копия части входного массива, используемая для вычисления хеш-кода. звучит так, как будто мои данные будут прочитаны, использованы для изменения состояния механизма хеширования, а также скопированы в outputBuffer,

Мне не нужно это копирование. Похоже, я могу пройти null вместо этого и выглядит работающим.

Должен ли я ожидать каких-либо проблем, если я прохожу null как outputBuffer?

1 ответ

Решение

Да, нормально пройти null, Причина, по которой он имеет этот параметр, заключается в том, что он реализует ICryptoTransform интерфейс. Этот интерфейс можно использовать при построении CryptoStream потому что вы, возможно, захотите создать набор преобразований. В этом случае, HashAlgorithm не изменяет данные вообще, так что в конечном итоге это определяется просто как копирование ввода в вывод.

Другие реализации ICryptoTransform (например, все, что фактически выполняет шифрование или дешифрование), конечно, также будет записывать нетривиальный вывод.

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


Текущая реализация просто имеет это, после того, как выполнит свою работу:

 if ((outputBuffer != null) && ((inputBuffer != outputBuffer) ||
      (inputOffset != outputOffset)))
      Buffer.BlockCopy(inputBuffer, inputOffset,
           outputBuffer, outputOffset, inputCount);
Другие вопросы по тегам