Длина зашифрованной строки

Мне нужно создать столбец базы данных, в котором будет храниться строка, зашифрованная с использованием Triple DES. Как определить длину столбца зашифрованной строки?

(Ответы на алгоритмы, отличные от Triple DES, также приветствуются.)

3 ответа

Решение

Блочные шифры, такие как DES, 3DES и AES, могут работать только с байтовыми блоками. DES и 3DES работают с блоком из 8 байтов, а AES с блоком из 16 байтов.

Чтобы справиться с этим, вы обычно применяете обратимое заполнение к своему тексту перед его шифрованием. В большинстве случаев это всегда будет заполнение "PKCS" (также называемое дополнением PKCS5 или PKCS7).

PKCS-заполнение добавляет, по крайней мере, один байт, так что дополненный текст имеет длину, кратную длине блока (8 байтов для 3DES). Значение байтов заполнения - это количество добавленных байтов. Fx. ABCDEF дополняется до ABCDEF0505050505, а 0011223344556677 дополняется до 0011223344566770808080808080808. Заметьте, что это легко удалить: вы просто смотрите на последний байт дополняемых байтов, проверяете, что он находится между 1 и длиной блока, и удаляете это количество байтов с конца (проверка того, что каждый удаленный байт имеет правильное значение).

Наконец, ответим на ваш вопрос: Предполагая, что вы используете 3DES с шифрованием CBC и дополнением PKCS - что вы, вероятно, и делаете - шифрование строки длины n будет иметь длину:

n + 8 - (n % 8)

Использование Triple DES не меняет длину строки, но она будет округлена до следующей 64-битной границы. Если вы намереваетесь "отобразить" его, вам придется его закодировать (как, впрочем, и в Base64.

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

Triple DES использует три 56-битных ключа DES, что дает 168-битные ключи. Это размер блока 64-битный.

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