Предварительный расчет выходной длины 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, как известно, везде добавляет свои вещи.