Предварительный расчет выходной длины AES

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

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

Для шифрования я использую класс RijndaelManaged .NET.

Например, файл размером 634 байта шифрует до 660 байтов.

Используя формулу, которую я нашел, и размер блока 16:

(inputSize / blockSize + 1) * blockSize

Я получаю 650 байтов. Почему есть расхождение?

Примеры пар ввода-вывода размера (в байтах):

Вход: 905296 Выход: 905332

Вход: 82320 Выход: 82356

Вход: 308 Выход: 340

1 ответ

Найденная вами формула не совсем верна.
Учитывая ECB или CBC (единственный выбор в этом классе):
Вычислить (Bytecount / Blocksize) и опустить десятичную часть
Затем добавьте 1 для заполнения, затем умножьте на Blocksize.

634/16 = 39,625 => 40
40 * 16 = 640

10 других байтов... возможно, заголовок или что-то в этом роде.
MS, как известно, везде добавляет свои вещи.

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