Вы снова забыли очистить буферы, что означает, что поток данных неполон.
[EDIT] Я не знаю о C #, но в Java вы должны вызывать doFinal () один раз после получения всех данных. (См. документы ).
Источник проблемы в том, что API шифрования должен знать, когда вы закончите. Он не может судить по данным, вы должны вызвать метод, чтобы сказать: «оберните его, создайте окончательную контрольную сумму, что угодно, чтобы получатель мог ее декодировать».