Какова цель кодировки base 64 и почему она используется в базовой аутентификации HTTP?

130

Я не получаю шифрование Base64.

Если можно расшифровать строку Base64, для чего это нужно?

Почему он используется для аутентификации HTTP Basic?

Это все равно, что сказать кому-то, что мой пароль перевернут на OLLEH.

Люди, увидевшие OLLEH, будут знать, что исходный пароль был HELLO.

ajsie
источник
10
base64 - это не шифрование, это кодировка
n611x007 03

Ответы:

250

Base64 - это не шифрование - это кодировка. Это способ представления двоичных данных с использованием только печатаемых (текстовых) символов.

См. Этот абзац на странице википедии о базовой аутентификации HTTP :

Хотя кодирование имени пользователя и пароля с помощью алгоритма Base64 обычно делает их нечитаемыми невооруженным глазом, они так же легко декодируются, как и кодируются. Безопасность не является целью этапа кодирования. Скорее, целью кодирования является кодирование несовместимых с HTTP символов, которые могут быть в имени пользователя или пароле, в символы, совместимые с HTTP.

Мэтт Бриджес
источник
4
Кроме того, похоже, что соответствующая кодировка символов для получения «двоичных данных» из строки должна быть iso-8859-1 . ( источник )
Myobis
60

Обычно это называется кодировкой base64, а не шифрованием! Приятная вещь в кодировке base64 заключается в том, что она позволяет вам представлять (двоичные) данные, используя только ограниченное общее подмножество доступных символов, что намного эффективнее, чем просто запись строки из единиц и нулей, например, в виде ASCII.

Флексография
источник
6
+1, но сравнение с хранением данных в потоке единиц, нулей слишком преувеличено. Лучше сравнить это с хранением данных в шестнадцатеричном формате. Потому что шестнадцатеричный будет только сделать x2больше байтов, чем исходный поток, а единицы, 0 - сделают в x8раз больше байтов. (И Base64 делает x1.3больше данных, чем исходный массив байтов). Поэтому иногда допустимо кодировать двоичный поток как шестнадцатеричную строку, удваивая количество байтов - например, просто для хранения хэша пароля в базе данных.
Агниус Василяускас
30

En crypt ion требует ключа (строки или алгоритма) для расшифровки; отсюда и "крипта" (корень: криптография )

En COD ИНГ модифицирует / смены / изменяет код символа в другой. В этом случае обычные байты данных теперь могут быть легко представлены и переданы с помощью HTTP.

vol7ron
источник
5
Шифрование просто означает «сделать скрытым» - криптография на основе ключей - очень недавнее изобретение. Шифрование - это форма кодирования, которая использовалась в качестве шифрования (но не кем-либо старше 12 лет в течение сотен лет).
2
Шифрование в просторечии используется для обозначения последних режимов шифрования, в частности компьютерного шифрования, основанного на ключах (открытый / закрытый ключ). Хотя это правда, нет необходимости указывать буквальное определение датированного слова; в противном случае вы бы стали возражать против исторического определения многих английских слов, используемых сегодня. Просторечие (а иногда и разговорный) дает словам контекст и, следовательно, определение.
vol7ron 01
1
Я не думаю, что это прозвучало грубо; Я согласен с вашей точкой зрения о современном контексте. Слова и определения постоянно развиваются. Я думаю, что «кодировать» и «зашифровать» определенно имеют два очень разных определения в современных вычислениях, и в вашем ответе содержится хорошая попытка суммировать различия.
Дэн Бечард
Кодировка Base64 - это форма обфускации, что означает просто нечеткое отображение. Для многих приложений это достаточное шифрование, где цель состоит, например, просто в искажении любого открытого текста, отправляемого по сети.
Доминик Черизано
6
@DominicCerisano: Нет, кодировка base64 не считается шифрованием, и я надеюсь, что вы не используете ее для защиты чего-либо.
Ry-
19

На обыденном языке «код» - это нечто секретное. В науке и технике код - это просто соглашение, набор правил о том, как что-то написать.

Этот код может быть секретным. В этом случае это называется шифрованием. Но в целом код не секрет. Возьмите генетический код. Он просто утверждает , что наша ДНК построена из четырех различных баз -  A, C, Gи Tи что три основы вместе образуют одну аминокислоту. Также есть таблица, в которой три буквы образуют аминокислоту.

В этом коде нет ничего секретного.

Точно так же Base64 не является секретным кодом. Скорее, это код, который позволяет хранить данные в шести битах на символ (таким образом, существует 64 различных объекта, то есть «база» системы равна 64, так же как основание нашей десятичной системы равно 10, поскольку существует 10 различных объектов. называется «цифрами»).

Конрад Рудольф
источник
17

Кодировка Base-64 является частью спецификаций MIME. Он обеспечивает безопасное для транспорта кодирование данных, которые не будут обработаны, если / когда они будут переданы через хост, который использует схему кодирования, отличную от той, которая использовалась исходным клиентом.

На интертубах много разных хостов, и вы не можете предполагать поддержку чего-либо, кроме 7-битного ASCII, без риска потери / путаницы данных.

Например, в мэйнфреймах IBM используется кодировка под названием EBCDIC (которая бывает во многих разных вариантах). Его кодовые точки полностью отличаются от кодовых точек, используемых компьютерами на основе ASCII - в ASCII буквы AZ равны 0x41 - 0x5A; в EBCDIC буквы A - Z даже не являются непрерывным диапазоном: буквы AI живут в 0xC1 - 0xC9, буквы JR живут в 0xD1 - 0xD9, а буквы SZ живут в 0xE2 - 0xE9.

Николас Кэри
источник
1

По умолчанию параметры поля заголовка сообщения в сообщениях протокола передачи гипертекста (HTTP) не могут содержать символы, выходящие за пределы набора символов ISO-8859-1.

Если имя пользователя и пароль содержат несовместимую кодировку, тогда HTTP не сможет передавать этот текст. чтобы предотвратить это, мы кодируем имя пользователя и пароль с помощью base64, чтобы убедиться, что мы отправляем HTTP-совместимый char через HTTP. для получения дополнительной информации см. этот Basic_access_authentication

Варуна
источник