Длина зашифрованной строки
Мне нужно создать столбец базы данных, в котором будет храниться строка, зашифрованная с использованием 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-битный.