Почему зашифрованный байтовый массив имеет длину, отличную от его представления char []? - PullRequest
3 голосов
/ 03 марта 2009

Я работал над некоторыми алгоритмами шифрования / дешифрования и заметил, что зашифрованные массивы byte [] всегда имели длину 33, а массивы char [] всегда имели длину 44. Кто-нибудь знает, почему это так?

(я использую шифрование Rijndael.)

Ответы [ 5 ]

3 голосов
/ 03 марта 2009

Заполнение и кодировка текста . Большинство алгоритмов шифрования имеют размер блока, и ввод должен быть дополнен кратным размеру этого блока. Кроме того, для преобразования двоичных данных в текст обычно используется алгоритм Base64 , который расширяет 3 байта в 4 символа.

1 голос
/ 03 марта 2009

Это, конечно, не так для всех алгоритмов шифрования, это должно быть просто свойство того, который вы используете. Не зная, что это за алгоритм, я могу только догадываться, но соотношение 33/44 предполагает, что алгоритм может сжимать каждый символ в 6 бит в массиве выходных байтов. Это, вероятно, означает, что он предполагает, что используется не более 64 различных символов, что является хорошим предположением для простого текста (фактически, именно так работает декодирование base64).

Но опять же, не зная, какой алгоритм вы используете, это все догадки.

1 голос
/ 03 марта 2009

Не зная, какое шифрование вы используете, определить точную причину немного сложно. Для начала вот статья на Как рассчитать размер зашифрованных данных . Похоже, вы используете хеш-код вашего открытого текста, поэтому результат короче.

Редактировать: вот источник реализации Rijndael . Похоже, что вывод зашифрованного текста изначально имеет ту же длину, что и ввод открытого текста, а затем он выполняет над ним base64, что, как упоминалось в предыдущем постере, уменьшило бы ваш конечный вывод до 3/4 исходного ввода.

0 голосов
/ 03 марта 2009

Это был бы довольно паршивый алгоритм шифрования, если бы он просто заменял байты один на один. Это было современное состояние 50 лет назад, и не очень хорошо работало даже тогда . :)

0 голосов
/ 03 марта 2009

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

Только вы можете знать наверняка, так как мы не можем видеть ваш код отсюда: -)

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