Когда число байтов, записанных HashAlgorithm.TransformBlock, отличается от входного размера?

MSDN заявляет о TransformBlock:

public int TransformBlock(
  byte[] inputBuffer,
  int inputOffset,
  int inputCount,
  byte[] outputBuffer,
  int outputOffset
)

Возвращаемое значение: количество записанных байтов.

Я предполагаю, что выходной буфер имеет достаточный размер. Как правило, входной буфер используется как выходной буфер, оба смещения 0, так что это не проблема.

Есть ли условие, которое может привести к тому, что возвращаемое значение не будет равным inputCount?

1 ответ

Решение

Предполагая, что реализация.net эквивалентна реализации mono, ответ: никогда. Выдает исключение или возвращает inputCount,

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

ИМО это плохой дизайн класса. Реализация интерфейса должна была быть явной, и пользователю должен был быть предоставлен чистый интерфейс, подобный HashCore а также HashFinal, которые являются точками расширения HashAlgorithm,

Другие вопросы по тегам