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

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

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

Ответы

Ответ 1

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

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

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

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

n + 8 - (n % 8)

Ответ 2

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

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

Ответ 3

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