Для чего используется кодировка base 64?

Я слышал, как люди говорили о" кодировке базы 64 " здесь и там. Для чего он используется?

16 ответов


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

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

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


Это в основном способ кодирования произвольных двоичных данных в ASCII текст. Он занимает 4 символа на 3 байта данных, плюс потенциально немного заполнения в конце.

по существу каждый 6 бит ввода кодируется в 64-символьном алфавите. "Стандартный" алфавит использует a-Z, a-z, 0-9 и + и /, С = в качестве символа заполнения. Есть URL-адрес-безопасных вариантов.

Википедия является достаточно хорошим источником дополнительной информации.


base-64 encoding-это способ взять двоичные данные и превратить их в текст, чтобы они легче передавались в таких вещах, как электронная почта и данные HTML-формы.

http://en.wikipedia.org/wiki/Base64


это текстовое кодирование двоичных данных, где результирующий текст имеет только буквы, цифры и символы"+", " / " и "=". Это удобный способ хранения / передачи двоичных данных через носитель, который специально используется для текстовых данных.

но почему Base-64? Две альтернативы преобразования двоичных данных в текст, которые сразу приходят на ум:

  1. Decimal: сохраните десятичное значение каждого байта как три числа: 045 112 101 037 и т. д. где каждый байт представлен 3 байтами. Данные раздуваются в три раза.
  2. шестнадцатеричный: хранить байты как шестнадцатеричные пары: AC 47 0D 1A и т. д. где каждый байт представлен 2 байта. Данные раздуваются в два раза.

Base-64 отображает 3 байта (8 x 3 = 24 бита) в 4 символах, которые охватывают 6 бит (6 x 4 = 24 бита). Результат выглядит примерно так: "TWFuIGlzIGRpc3Rpb...". Поэтому вздутие живота является лишь 4/3 = 1.3333333 раз оригинал.


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

хэш:

хэши-это односторонние функции, которые преобразуют блок байтов в другой блок байтов фиксированного размера, такой как 128bit или 256bit (SHA/MD5). Преобразование полученных байтов в Base64 значительно упрощает отображение хэша, особенно при сравнении контрольной суммы для целостности. Хэши так часто встречаются в Base64, что многие люди ошибка Base64 сама по себе как хэш.

криптография:

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

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

сертификаты

сертификаты x509 в формате PEM имеют кодировку base 64. http://how2ssl.com/articles/working_with_pem_files/


от http://en.wikipedia.org/wiki/Base64

термин Base64 относится к определенной кодировке передачи содержимого MIME. Он также используется в качестве общего термина для любой подобной схемы кодирования, которая кодирует двоичные данные, обрабатывая их численно и переводя в представление базы 64. Определенный выбор основания должен к история кодировки: можно выбрать набор из 64 символы, которые являются частью общего подмножества для большинства кодировок, а также для печати. Эта комбинация оставляет данные маловероятными модифицированные при транзите через системы, такие как электронная почта, которые традиционно не 8-битные.

Base64 может использоваться в различных контекстах:

  • Evolution и Thunderbird используют Base64 для запутывания паролей электронной почты[1]
  • Base64 может использоваться для передачи и хранения текста, который в противном случае может вызвать столкновение разделителей
  • Base64 часто используется как быстрый, но небезопасный ярлык для затемнения секретов без накладных расходов на управление криптографическими ключами

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

  • Base64 используется для кодирования символьных строк в файлах LDIF
  • Base64 иногда используется для встраивания двоичных данных в XML-файл, используя следующий синтаксис ...... например. Закладки в Firefox.формат html.
  • Base64 также использовано связывая с приборами печатания подписи правительства фискальными (обычно, над серийными или параллельными портами) к минимизируйте задержку при передаче символов квитанции для подписания.
  • base64 используется для кодирования двоичных файлов, таких как изображения в сценарии, чтобы избежать зависимости от внешних файлов.
  • смогите быть использовано для того чтобы врезать сырцовые данные по изображения В а Свойство CSS, такое как background-image.

в первые дни компьютеров, когда межсистемная связь телефонной линии не была особенно надежной, использовался быстрый и грязный метод проверки целостности данных:"битовая четность". В этом методе каждый передаваемый байт будет иметь 7-бит данных, а 8-й будет 1 или 0, чтобы заставить общее число 1 бит в байте быть четным.

следовательно, 0x01 будет передан как 0x81; 0x02 будет 0x82; 0x03 останется 0x03 и т. д.

дополнительно это система, когда набор символов ASCII был определен, только 00-7F были назначены символы. (Все еще сегодня все символы, установленные в диапазоне 80-FF, нестандартны)

многие маршрутизаторы дня ставят проверку четности и перевод байтов в аппаратное обеспечение, заставляя компьютеры, подключенные к ним, строго обрабатывать 7-битные данные. Это заставляет вложения электронной почты (и все другие данные, поэтому протоколы HTTP и SMTP основаны на тексте) преобразовываться в текстовый формат.

несколько роутеры выжили в 90-х. Я сильно сомневаюсь, что они используются сегодня.


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


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

Я попал в беду, когда обнаружил, что utf8 MySQL не поддерживает 4-байтовые символы unicode, поскольку он использует 3-байтовую версию utf8. Итак, что я сделал, чтобы поддержать полный 4-байтовый unicode над utf8 MySQL? Ну, base64 кодирует строки при хранении в базе данных и base64 декодирует при извлечении.

поскольку кодирование и декодирование base64 очень быстро, вышеуказанное работало совершенно.

У вас есть следующие пункты, чтобы принять к сведению:

  • кодировка Base64 использует на 33% больше памяти

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

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


Он используется для преобразования произвольных двоичных данных в ASCII текст.

например, вложения электронной почты, отправленных таким образом.


Я использую его в практическом смысле, когда мы передаем большие двоичные объекты (изображения) через веб-службы. Поэтому, когда я тестирую веб-службу C# с помощью скрипта python, двоичный объект можно воссоздать с помощью небольшой магии.

[в python]

import base64
imageAsBytes = base64.b64decode( dataFromWS )

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


чтобы немного расширить то, что говорит Брэд: многие транспортные механизмы для электронной почты и Usenet и другие способы перемещения данных не являются "8 - битными чистыми", что означает, что символы за пределами стандартного набора символов ascii могут быть искажены в пути-например, 0x0D может рассматриваться как возврат каретки и превращаться в возврат каретки и линейный канал. База 64 отображает все двоичные символы в несколько стандартных ascii-букв, цифр и знаков препинания, чтобы они не были искажены это путь.


"схемы кодирования Base64 обычно используются, когда есть необходимость кодировать двоичные данные, которые должны храниться и передаваться через носители, предназначенные для обработки текстовых данных. Это делается для того, чтобы данные оставались нетронутыми без изменений во время транспортировки"(Wiki, 2017)

пример может быть следующим: у вас есть веб-служба, которая принимает только символы ASCII. Вы хотите сохранить, а затем передать данные пользователя в другое место (API) , но получатель хочет получить нетронутые данные. В base64-это для этого. . . Единственным недостатком является то, что кодировка base64 потребует около 33% больше места, чем обычные струны.

другой пример:: uenc = url encoded = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tzw4tcy1nzwwta2f5yw5vlxhpas5odg1s = http://loc.querytip.com/asics-men-s-gel-kayano-xii.html.

Как вы можете видеть, мы не можем поместить символ " / " в URL, если мы хотим отправить последний посещенный URL в качестве параметра, потому что мы нарушим правило атрибута / значения для "MOD rewrite" - получить параметр.

полный пример: "http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel-kayano-xii.html/product/93/"


в base64

Base64-общий термин для ряда аналогичных схем кодирования, которые кодируют двоичные данные, обрабатывая их численно и переводя их в базовое представление 64. Термин Base64 происходит от определенной кодировки передачи содержимого MIME.

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


Base64 можно использовать для многих целей.

основная причина заключается в преобразовании двоичных данных во что-то проходимое.

Я иногда использую его для передачи JSON-данных с одного сайта на другой, сохраняют информацию в cookies о пользователе.

Примечание.: Вы "можете" использовать его для шифрования - я не понимаю, почему люди говорят, что вы не можете, и что это не шифрование, хотя оно было бы легко ломаемым и неодобрительно. Шифрование означает не что иное, как преобразование строка данных в другую строку данных, которые могут быть позже расшифрованы или нет, и это то, что делает base64.