Что такое хороший способ для запутывания строки 64 base? - PullRequest
2 голосов
/ 23 июля 2011

Кодировка Base64 часто используется для запутывания открытого текста, мне интересно, есть ли какие-нибудь быстрые / простые способы запутывания строки base 64, чтобы ее нельзя было легко распознать как таковую.Для этого метод должен запутывать символы заполнения (= s) так, чтобы они стали другим символом и были более рассредоточенными.

Кто-нибудь знает простой (и легко обратимый) способ сделать это?

Вы могли бы использовать шифр сдвига, но я ищу что-то более подробное, например, если мой шифр сдвига сопоставлен = a, кто-то может заметить строку, которая часто заканчивается буквой.

Цель состоит не в том, чтобы повысить безопасность, а в том, чтобы просто сделать base64 неузнаваемым в качестве base 64. Ему также не нужно передавать профессионала по безопасности, просто человек, который знает, что такое base64 и как он выглядит.Пример (= в конце и т. Д.)

Описанный мною метод, вероятно, будет добавлять неосновные 64 символа, например ^% $ # @ !, чтобы помочь запутать читателя.

Большинство ответов, по-видимому, относятся к теме ПОЧЕМУ я хотел бы сделать это, и основной ответ заключается в том, что операция будет выполняться много раз (поэтому я хочу что-то недорогое), исделано так, чтобы пароль не запоминался (почему я не XOR).Кроме того, данные не являются высокочувствительными и предназначены только для использования в качестве метода против случайного пользователя, который может знать, что такое строка base 64.

Ответы [ 6 ]

5 голосов
/ 23 июля 2011

Пара предложений:

  1. Обрезать любое окончание = (согласно Википедии они не нужны), а затем поразрядно аннулировать каждый байт.Это преобразует текст в в основном нечитаемые символы.
  2. Цикл по данным и xor каждый символ со своей позицией, по модулю 256. Это исключит любой простой статистический анализ, поскольку отображение каждого символа зависит отпозиция в строке.
2 голосов
/ 17 мая 2017

В отличие от одного из пунктов лучшего ответа Андерса Абеля, знаки = в строках base64, похоже, имеют значение:

$ echo -n foobar | base64 
Zm9vYmFy
$ echo -n foobar1 | base64 
Zm9vYmFyMQ==
$ echo -n Zm9vYmFyMQ | base64 -D
foobar$ echo -n Zm9vYmFyMQ= | base64 -D
foobar$ echo -n Zm9vYmFyMQ== | base64 -D
foobar1$
1 голос
/ 23 июля 2011

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

в противном случае ответ несколько зависит от других ограничений вашей системы, но на ум пришло несколько идей.если вас просто беспокоят символы-разделители, и у вас есть контроль над процессом, который с самого начала генерирует Base64, вы можете выбрать какой-либо метод дополнения данных до до преобразования, исключая, таким образом, '='символы из вывода.

в том же духе, вы можете использовать один из вариантов, таких как кодировка base64url (см. http://en.wikipedia.org/wiki/Base64, чтобы получить много полезной информации о вариантах), в котором не используется символ pad.

после исключения символа «=» одним из этих методов вы, возможно, могли бы выполнить какую-то замену символа на сгенерированном Base64, просто поменяв местами все остальные символы, просто оставив любой последний символ на месте.возможно, вы могли бы также сделать какую-то замену заглавных или строчных букв на некоторые другие символы, чтобы быстро выглядело как Base64.

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

1 голос
/ 23 июля 2011

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

Очень простой пример: при заданной входной строке «Hello» сгенерируйте случайное число в диапазоне 1–9 и используйте его в качестве смещения для применения ккаждый входной символ.Предположим, вы сгенерировали «5», тогда перекодированная строка будет «5Mjqqt».Или закодируйте смещение как букву, а не как число (a = 1, b = 2, ...). Затем отступ "=" будет каждый раз переводиться на другой символ.

Или вы можетепросто бросьте обивку;согласно статье Википедии , это на самом деле не нужно.

(Но подумайте, действительно ли это необходимо и достаточно, чтобы делать в первую очередь. Из вашего вопроса не ясно *)1009 * почему вы хотите запутать данные базы 64.)

1 голос
/ 23 июля 2011

То, о чем вы просите, называется «безопасность мраком» и, как правило, является плохой идеей.

Кодировка Base64 никогда не предназначалась и не предназначалась для использования для запутывания текста или данных. Он используется для кодирования двоичных данных, которые должны проходить через некоторый канал связи, который допускает только символы ASCII - например, сообщения электронной почты, или быть частью XML и т. Д.

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

0 голосов
/ 23 июля 2011

Base64 обычно используется, когда вы хотите, чтобы ваши данные проходили через некоторый канал, который может искажать не буквенно-цифровые символы - например, в XML. Если это тоже ваша задача - ваш код будет похож на Base64, как бы вы ни пытались:)

Если ваш канал хорошо обрабатывает двоичные данные - тогда просто получите исходный текст (декодируйте Base64 обратно), получите двоичное представление для него и используйте что-то вроде xor. Например, сделать xor 37 с каждым байтом в исходных байтах. Эта же операция восстановит ваш текст обратно.

Но это все равно легко узнать любому, кто имеет базовые знания о криптоанализе. Если это проблема - используйте реальное шифрование.

...