Могу ли я просто передать значение 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);