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





Тройной DES использует три 56-битных ключа DES, что дает 168-битные ключи. Размер его блока - 64-битный.
(string.length / 8) + 1, предполагая 8-битные символы
длина указывается в символах (или в байтах, если хотите), поэтому длина / 8 использует 64-битные блоки.
Использование Triple DES не изменяет длину строки, но будет округлено до следующей 64-битной границы. Если вы намереваетесь «отобразить» его, вам придется его закодировать (как, впрочем, и в Base64.
Что касается других алгоритмов, то здесь сложно ответить, так как их много. Блочные шифры всегда дополняют ввод в соответствии с размером своего блока, тогда как многие потоковые шифры этого не делают.
Я только что нашел это: msdn.microsoft.com/en-us/library/… Выдержка: «Режим кражи зашифрованного текста (CTS) обрабатывает любую длину простого текста и создает зашифрованный текст, длина которого соответствует длине простого текста».
Блочные шифры, такие как DES, 3DES и AES, могут работать только с блоками байтов. DES и 3DES работают с блоками по 8 байтов, а AES - с блоками по 16 байтов.
Чтобы справиться с этим, вы обычно применяете обратимое заполнение к своему открытому тексту перед его шифрованием. Обычно это всегда будет заполнение PKCS (также называемое заполнением PKCS5 или PKCS7).
PKCS-padding добавляет по крайней мере один байт, так что заполненный текст имеет длину, кратную длине блока (8 байтов для 3DES). Значение padding-bytes - это количество добавленных байтов. Fx. ABCDEF дополняется до ABCDEF0505050505, а 0011223344556677 дополняется до 001122334456677080808080808080808. Обратите внимание, что это легко удалить: вы просто посмотрите на последний байт дополненных байтов, убедитесь, что он находится между 1 и длиной блока, и удалите это количество байтов. с конца (проверяя, что каждый удаленный байт имеет правильное значение).
Наконец, чтобы ответить на ваш вопрос: предполагая, что вы используете 3DES с шифрованием CBC и PKCS-заполнением - что вы, вероятно, используете - шифрование строки длины n будет иметь длину:
n + 8 - (n % 8)
Итак, если мне нужно зашифровать 64 байта, n будет 72?
Да, 64 байта, зашифрованные с использованием 3DES / CBC / PKCS-padding, станут 72 байтами после шифрования.
Пожалуйста, дополните. Например, если у меня есть строка длиной 100 символов, как мне рассчитать длину зашифрованной строки?