Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

По сути, это способ кодирования произвольных двоичных данных в текст ASCII.Требуется 4 символа на 3 байта данных плюс, возможно, небольшое дополнение в конце.

По сути, каждые 6 бит ввода кодируются 64-символьным алфавитом.В «стандартном» алфавите используются буквы A-Z, a-z, 0-9, + и / с = в качестве заполняющего символа.Существуют варианты, безопасные для URL.

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

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

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

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

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

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

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

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

Хэши:

Хэши — это односторонние функции, которые преобразуют блок байтов в другой блок байтов фиксированного размера, например 128-битный или 256-битный (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-файл, используя синтаксис, аналогичный ......напримерbookmarks.html Firefox.
  • BASE64 также используется при общении с государственными устройствами печати фискальной подписи (обычно над последовательными или параллельными портами), чтобы минимизировать задержку при передаче символов получения для подписания.
  • Base64 используется для кодирования двоичных файлов, таких как изображения, в сценариях, чтобы избежать зависимости от внешних файлов.
  • Может использоваться для встраивания необработанных данных изображения в свойство CSS, такое как фоновое изображение.

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

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

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

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

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

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

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

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

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

Вам следует обратить внимание на следующие моменты:

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

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

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

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

Например, таким образом отправляются вложения к электронным письмам.

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

[На питоне]

import base64
imageAsBytes = base64.b64decode( dataFromWS )

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

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

Другой пример::uenc = закодированный URL = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http://loc.querytip.com/asics-men-s-gel-kayano-xii.html.

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

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

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

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

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

Проблема с двоичными данными заключается в том, что они содержат нулевые символы, которые в некоторых языках, таких как C, C++, представляют конец строки символов, поэтому отправка двоичных данных в необработанной форме, содержащей NULL-байты, остановит полное чтение файла и приведет к повреждению данных.

Например :

В C и C++ этот «нулевой» символ показывает конец строки.Итак, «HELLO» хранится так:

ПРИВЕТ

72 69 76 76 79 00

00 говорит: «Остановись здесь».

Теперь давайте углубимся в то, как работает кодирование BASE64.

Момент, который следует отметить:Длина строки должна быть кратна 3.

Пример 1:

Строка для кодирования:«туз», Длина=3

1) Преобразуйте каждый символ в десятичный.

а= 97, в= 99, е= 101

enter image description here

2) Измените каждое десятичное представление на 8-битное двоичное представление.

97= 01100001, 99= 01100011, 101= 01100101

Комбинированный:01100001 01100011 01100101

3) Отделить в группу 6-бит.

011000 010110 001101 100101

4) Пересчитать двоичную систему в десятичную.

011000= 24, 010110= 22, 001101= 13, 100101= 37

5) Скрыть десятичные символы в base64, используя диаграмму base64.

24= Д, 22= Ш, 13= Н, 37= л

«туз» => «YWNl»

enter image description here

Пример 2:

Строка для кодирования:Длина «abcd» = 4, она не кратна 3.Таким образом, чтобы сделать длину строки кратной 3, мы должны добавить 2 бита, чтобы сделать длину = 6.Бит заполнения представлен знаком «=».

Момент, который следует отметить:Один бит заполнения равен двум нулям 00, поэтому два бита заполнения равны четырем нулям 0000.

Итак, начнем процесс: –

1) Преобразуйте каждый символ в десятичный.

а= 97, б= 98, в= 99, г= 100

2) Измените каждое десятичное представление на 8-битное двоичное представление.

97= 01100001, 98= 01100010, 99= 01100011, 100= 01100100

3) Отделить в группу 6-бит.

011000, 010110, 001001, 100011, 011001, 00

поэтому последние 6 бит не являются полными, поэтому мы вставляем два бита заполнения, которые равны четырем нулям «0000».

011000, 010110, 001001, 100011, 011001, 000000 ==

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

4) Пересчитать двоичную систему в десятичную.

011000= 24, 010110= 22, 001001= 9, 100011= 35, 011001= 25, 000000=0 ==

5) Скрыть десятичные символы в base64, используя диаграмму base64.

24= Y, 22= W, 9= j, 35= j, 25= Z, 0= A ==

«abcd» => «YWJjZA==»

База64

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

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

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

Основная причина — преобразовать двоичные данные во что-то приемлемое.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top