2009-09-29 2 views
3

Я использую это для шифрования: http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspxПредсказание длины зашифрованной строки

Есть ли способ, я могу предсказать, что зашифрованный текст будет выглядеть? Я конвертирую зашифрованный вывод в текст, чтобы сохранить его в db.

Я просто хочу убедиться, что размер столбца базы данных достаточно велик.

Я ограничиваю ввод текста 20 символами.

ответ

10

Используете ли вы SQL Server 2005 или выше? Если это так, вы можете просто использовать VARCHAR(MAX) или NVARCHAR(MAX) для типа столбца.

Если вы хотите, чтобы быть немного более точным ...

Максимальный размер блока для RijndaelManaged составляет 256 бит (32 байта).

Максимальный размер входного файла составляет 20 символов, поэтому, даже если мы предположим, что сценарий наихудшего сценария составляет 4 байта на символ, это будет составлять всего 80 байт, а затем будет заполнено до 96 байт для процесс шифрования.

Если вы используете кодировку Base64 на зашифрованном выходе, который будет создавать 128 символов из 96 зашифрованных байтов. Если вы используете шестнадцатеричное кодирование, тогда будет создано 192 символа из 96 зашифрованных байтов (плюс, может быть, несколько дополнительных символов, если вы префикс шестнадцатеричной строки с «0x»). В любом случае ширина столбца 200 символов должна дать вам более чем достаточный запас высоты.

(NB: Это просто вне-топ-моей головки расчеты я не подтверждал, что они на самом деле правильно.!)

3

Для неизвестного алгоритма шифрования с отсутствием информации чтобы найти его в Интернете, я бы написал небольшую тестовую программу, которая зашифровала случайный набор строк максимальной длины, найдет самую длинную длину в выходе, а затем умножьте на коэффициент безопасности, исходя из того, насколько вероятна длина ввода для изменения, и насколько точным был результат тестовой программы.

Действительно, в общем говоря, вы, вероятно, будете находиться в диапазоне длины входного сигнала 1.5x - 2x.

0

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

Если он «расширяет» данные, это, вероятно, не очень хороший алгоритм шифрования.

2

Для этого конкретного алгоритма, длина шифротекста будет,

((length+16)/16)*16 

Это, чтобы удовлетворить размер блока и требование заполнения.

Я предлагаю вам также добавить случайный IV в зашифрованный текст, чтобы потребовалось еще 16 байт.

Однако, если вы хотите поместить это как char в базу данных, вы должны его закодировать. Это еще больше увеличит его.

Для base64 умножьте его на 4/3. Для гексагона, удвойте его.

+1

Учитывая, что заполнение составляет 16 (байты, бит, гигаквады); p – leppie

Смежные вопросы