Как зашифровать данные без превышения размера исходных данных? - PullRequest
0 голосов
/ 15 февраля 2011

Мой вопрос прост: я ожидаю алгоритм шифрования,

Мне нужно зашифровать исходные данные (текст и т. Д.), Чтобы размер зашифрованных данных соответствовал размеру исходных данных? Поделитесь своей идеей любезно?

Пример: Исходные данные являются «тестовыми» (длина текста 4), ожидаемые зашифрованные данные должны быть такими же, как «etst» (длина 4).

Ответы [ 3 ]

3 голосов
/ 15 февраля 2011

Это не всегда возможно, особенно при небольших объемах данных.Я почти уверен, что все стандартные алгоритмы работают на «блоках», которые обычно имеют длину ключа.Поэтому, если вы не используете действительно слабый ключ или не используете что-то более слабое, например заменительный шифр или Цезарь, ваши зашифрованные данные могут оказаться немного дольше, чем исходные.

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

0 голосов
/ 15 февраля 2011

Большинство алгоритмов шифрования работают с блоками данных. AES, например, работает с блоками размером 128 или 16 байт. Если вы переполняете блок хотя бы на 1 байт, AES должен требовать другой блок данных.

с AES вы всегда получите результат, кратный 16 байтам.

Если ваши результирующие данные намного больше, вы должны убедиться, что вы используете поток байтов. Если по какой-то причине вы скопируете файл в виде текста, .Net преобразует его в Unicode, который изменит ваши данные с 8 бит на символ на 16 бит на символ, что удвоит размер вывода.

0 голосов
/ 15 февраля 2011

Если вы не используете простой заменительный шифр (заменяя букву другой буквой или символом), вы ищете файл, который увеличивается в размере. Если вы используете заменяющий шифр, то его очень легко сломать. Почему вам НУЖНО сохранять размер файла одинаковым?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...