Шифротексты не дополняются - открытые тексты дополняются, так что они являются допустимым входным сигналом для алгоритма шифрования.
Алгоритм AES требует , чтобы входное значение было целым числом 16-байтовых блоков, а его выходная длина была равна длине входного значения.
Итак, для вашего 19-байтового незашифрованного файла любой инструмент, который вы используете для шифрования:
- Добавление 13 байтов (вероятно, в конце), в результате получается открытый текст с 32 байтами. Результат должен содержать информацию о заполнении, чтобы принимающая сторона могла его удалить.
- Шифрование дополненного открытого текста с получением 32-байтового зашифрованного текста
Важная информация равномерно распределяется между 32 байтами зашифрованного текста, поэтому невозможно обрезать зашифрованный текст, не сделав его бесполезным .
В конце концов, когда вы расшифровываете, вам нужно:
- Расшифруйте 32-байтовый зашифрованный текст, получив 32-байтовый открытый текст
- Удалите последние 13 байтов, получив исходный текст
Формулировка вашего вопроса предполагает, что вы уже знаете, как расшифровать, и что проблема заключается в удалении отступов.
Итак, как вы узнаете, сколько байтов нужно обрезать? Это зависит от того, какая схема заполнения была использована для его создания. Их много - см. Википедию .
Одной из распространенных схем заполнения является PKCS # 7, в которой все байты заполнителя имеют значение n , где n - количество добавленных байтов. Таким образом, в вашем примере все 13 байтов заполнения байтов имеют значение 13. Чтобы удалить это, просто прочитайте последний байт и обрежьте это количество байтов.
(Обратите внимание, что в PKCS # 7 для входа, который уже содержит целое число блоков, будет добавлен дополнительный блок с каждым байтом, установленным в 16.)
Но, не , предположим, ваша сторона шифрования использует PKCS # 7 - узнайте наверняка. Либо, посмотрев документацию / источник о том, что делает шифрование, либо эмпирически, расшифровав и изучив содержимое еще открытого текста.