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

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


person MrDatabase    schedule 14.10.2008    source источник
comment
Из руководства для base64_encode (): эта кодировка предназначена для двоичные данные переживают транспортировку через транспортные уровни, которые не являются 8-битными чистыми, такие как тела почты.   -  person still_dreaming_1    schedule 28.02.2019


Ответы (18)


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

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

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

person Dave Markle    schedule 14.10.2008
comment
(Теоретически вы можете использовать кодировку base-80 или что-то подобное, но это будет значительно сложнее. Степень двойки является естественной базой для двоичного кода.) - person Jon Skeet; 14.10.2008
comment
@yokees: Нет никаких гарантий, это просто персонажи, которые почти всегда безопасны. Вот почему существует несколько форм Base-64 (en.wikipedia.org/wiki/Base- 64). - person ; 12.01.2013
comment
@Jon - какой вариант использует браузер, когда я помещаю Base64 в тег изображения? - person employee-0; 19.09.2013
comment
Это лучшее обсуждение темы, которую я вижу; нет однозначного ответа, но я хотел бы спросить его именно здесь. - person ; 19.09.2013
comment
Означает ли это, что при передаче всех данных сетевого типа должна использоваться какая-то кодировка? - person Tanner Summers; 09.08.2016
comment
Но почему для кодирования строковых данных используется метод base64? например, в функции javascript atob. Имеется ли в виду, что сервер должен кодировать файл json в формат base64? Специальные символы могут быть вариантом использования, но почему в этом случае не использовать utf8, равнозначны ли они? Мы будем очень благодарны за любые дополнительные ресурсы по этому поводу. - person partizanos; 30.09.2016
comment
Я предположил, что base 64 относится к системе счисления, а не к количеству символов в наборе. Нет? - person Tom Russell; 04.05.2017
comment
@TomRussell: Base64 означает количество символов, используемых для кодирования. Теоретически вы можете представить одно число таким образом, используя эти 64 символа в качестве числа с основанием 64 вместо 10 символов, которые мы обычно используем для представления числа с основанием 10. - person Dave Markle; 04.05.2017
comment
@DaveMarkle Приятно. Спасибо, что прояснили это для меня. Я бы перефразировал это как использование подмножества из этих 64 символов ... - person Tom Russell; 04.05.2017
comment
@TomRussell - Я не уверен, откуда вы берете идею подмножества. Термин base-64 действительно относится к системе счисления. В обычном десятичном формате (с основанием 10) у нас есть 10 различных символов. В шестнадцатеричной системе счисления (основание 16) у нас есть 16 различных символов. В двоичном формате у нас есть 2 разных символа. Итак, в base-64 у нас есть 64 различных символа. Итак, это действительно просто система счисления, точно такая же, как и в других системах счисления. Теперь, КАКИЕ 64 символа использовать - это совершенно другой вопрос, и в некоторых случаях вам нужно использовать другой набор из 64 символов, чем в других случаях. - person John Y; 03.08.2017
comment
@John Y: Да, я не очень разбираюсь в системах счисления, поэтому мой комментарий, возможно, просто не имел смысла. Думаю, я придирчивал к тому, что числа почти всегда представлены чем-то меньшим, чем полный набор цифр в системе счисления. Например, 2334, состоящее из подмножества (2, 3, 4). РЖУ НЕ МОГУ. - person Tom Russell; 04.08.2017
comment
Base-85 используется в некоторых системах, поскольку он может кодировать 32-битные фрагменты напрямую как пять символов. Он не только более компактен, чем base-64, но и объединяет 32-битные фрагменты. В отличие от этого, base-64 требует, чтобы данные, которые происходят в виде 32-битных блоков, были разделены на группы по четыре байта. а потом хватал группами по 3 байта. - person supercat; 14.09.2017
comment
Если кто-то знает, было бы неплохо иметь список хотя бы некоторых протоколов, которые не работают. - person Tadej; 26.01.2018
comment
Имеет ли смысл кодировать base-64 простой 7-битный текстовый файл ASCII? - person stephanmg; 18.04.2019
comment
@stephanmg. В некоторых обстоятельствах может быть, да. ASCII содержит набор символов, которые некоторые протоколы могут интерпретировать как управляющие коды (например, NUL, DEL, BEL, LF). Другие кодировки (например, quoted-printable) могут быть здесь более эффективными, но, безусловно, вариант с Base64. - person TRiG; 28.11.2019
comment
К вашему сведению, этот ответ цитируется в статье css-tricks Наверное, не base64 svg - person ashleedawg; 06.10.2020

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

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

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

person Jon Skeet    schedule 14.10.2008
comment
На таком языке, как php, будут поступать двоичные данные. Мы почти всегда работаем со строковыми данными, которые являются текстовыми. - person Cholthi Paul Ttiopic; 05.09.2016
comment
@CholthiPaulTtiopic: результаты шифрования или сжатия звука / изображений / видео. - person Jon Skeet; 05.09.2016
comment
что насчет хранилища, php, похоже, не имеет двоичного типа данных - person Cholthi Paul Ttiopic; 06.09.2016
comment
@CholthiPaulTtiopic: Боюсь, я понятия не имею, что вы имеете в виду, говоря о хранении, но на данный момент я думаю, что мы несколько не по теме. - person Jon Skeet; 06.09.2016
comment
Конечно, да. Я предполагаю, что мне нужен был строковый двоичный файл, который фактически оставался двоичными данными с точки зрения внутреннего представления. Спасибо за ваше время. - person Cholthi Paul Ttiopic; 06.09.2016
comment
@CholthiPaulTtiopic: я бы категорически не хотел думать о двоичных строках. Двоичные данные следует рассматривать как двоичные данные, а не как текст. Я видел буквально сотни - возможно, тысячи - вопросов по SO, которые в основном сводятся к тому, что люди недостаточно заботятся об этом различии. - person Jon Skeet; 06.09.2016
comment
@CholthiPaulTtiopic, вы просто работаете с ним как со строкой, и это нормально. Я не знаю, есть ли ошибки, на которые следует обратить внимание в результате работы с ним как с строкой, но я знаю, что PHP обычно извлекает двоичные данные как строку и передает ее как строку. Например, вы можете читать из двоичного файла и сохранять данные в другой путь к файлу, и это должно работать, насколько я знаю. - person still_dreaming_1; 28.02.2019
comment
@ still_dreaming_1 PHP называет их binary strings. (источник) php.net/manual/en/function.pack.php - person Cholthi Paul Ttiopic; 28.02.2019
comment
@CholthiPaulTtiopic В конечном итоге это просто строки, которые, как известно программисту, содержат двоичные данные. В информации о сигнатуре метода, предоставленной для этой функции пакета, с которой вы связались, говорится, что она возвращает строку, а не двоичную строку. Я считаю, что pack () и unpack () нужны только в том случае, если вам нужно проанализировать или изменить двоичные данные. - person still_dreaming_1; 28.02.2019

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

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

person Brad Wilson    schedule 14.10.2008

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

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

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

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

person Ates Goral    schedule 14.10.2008
comment
Правильно ли я понимаю, что 64 - лучший выбор, поскольку это наибольшая степень двойки, которая может быть преобразована в печатный символ ASCII (их 95)? - person voho; 18.01.2017
comment
Если в обоих случаях они 24 бита, то разве раздувание не 1: 1? Или, когда вы говорите 4 символа, которые охватывают 6 бит, вы имеете в виду, что на самом деле на char есть 8 бит, но первые два - это заполненные нулями? - person David Klempfner; 27.02.2019
comment
@Backwards_Dave Каждые 6 бит выражаются в 8 битах. Таким образом, вздутие живота составляет 8: 6 или 4: 3. - person Ates Goral; 27.02.2019
comment
@AtesGoral Я прав в своем предположении, что когда вы используете Base256, вы можете сопоставить его 1: 1? потому что 1 байт = 8 бит = 256 возможных символов? - person ChillaBee; 08.01.2021
comment
@ user2774480 В качестве мысленного эксперимента - да. Но вряд ли практичности в использовании Base256 нет. - person Ates Goral; 13.01.2021

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

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

Например :

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

H E L L O

72 69 76 76 79 00

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

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

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

Пример 1:

Кодируемая строка: «туз», длина = 3

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

a= 97, c= 99, e= 101

введите описание изображения здесь

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= Y, 22= W, 13= N, 37= l

«Ace» => «YWNl»

введите описание изображения здесь

Пример 2:

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

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

Итак, приступим к процессу: -

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

a= 97, b= 98, c= 99, d= 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 ==»

person Rajesh Prajapati    schedule 10.05.2019
comment
это действительно отличное объяснение - person Mahesh Jamdade; 18.10.2019
comment
Лучшее объяснение на данный момент - person Naveen Raju; 28.02.2021
comment
Отличное объяснение - person Rahul Srivastava; 09.03.2021
comment
Хорошее объяснение !! - person Narendar Singh Saini; 27.05.2021

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

Хеши:

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

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

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

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

Сертификаты

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

person Despertar    schedule 25.08.2012
comment
На самом деле во многих случаях проще с точки зрения обработки хранить байты как байты. Даже в базе данных и особенно в файле (если используются записи фиксированной длины или байты являются единственным содержимым). Base64 обычно используется, когда эти байты предназначены для передачи где-то, особенно по каналу, который может отсекать биты или интерпретировать некоторые байты как управляющие коды. - person cHao; 25.08.2012
comment
Я никогда не видел хеша, записанного как 8-битные целые числа без знака, 0,1,255,36 ... и отображение его с помощью UTF-8 или любой другой кодировки не имело бы смысла, как еще вы бы отобразили его, кроме как с base64? Ключи шифрования и зашифрованные данные часто хранятся в файлах конфигурации и XML, где вы не можете хранить необработанные байты. Я согласен, если вы можете хранить его как необработанные байты, тогда непременно, но base64 предназначен для тех ситуаций, когда вы не можете. Base64 может использоваться не только для передачи. Это просто два распространенных сценария, в которых вы это увидите. - person Despertar; 25.08.2012
comment
Вы бы отобразили хеш как шестнадцатеричный, а не десятичный. Для хешей это на самом деле гораздо более распространено, чем base64. - person cHao; 23.02.2014
comment
@cHao Да, это тоже обычное дело. Шестнадцатеричные цифры могут представлять любые двоичные данные, но основание 64 имеет то преимущество, что оно занимает намного меньше места, поскольку использует больше символов. - person Despertar; 23.02.2014
comment
У вас есть обратный размер SHA и MD5; SHA обычно (но не всегда) равен 256, а MD5 - 128. - person The Daleks; 11.06.2020

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

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

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

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

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

person James Curran    schedule 14.10.2008
comment
Это отличный повод для обсуждения и интересный урок истории, спасибо. - person Dan Bechard; 05.06.2015
comment
Но я думаю, что принятие 7-битного ASCII было в первую очередь вызвано форматами перфоленты, и его истоки лежат в телеграфии, а не в межкомпьютерной коммуникации. - person Michael Kay; 01.07.2020

Из 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, такое как background-image.
person warren    schedule 14.10.2008

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

person Konrad Rudolph    schedule 14.10.2008

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

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

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

Вы должны принять к сведению следующие моменты:

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

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

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

person Basil Musa    schedule 06.06.2015
comment
Вы можете продать это как функцию, в которой строки базы данных используют базовую форму шифрования. Мне нравится ваш стиль: D - person Ercan; 17.09.2015
comment
Вы могли бы продать это как функцию, заключающуюся в том, что строки базы данных используют базовую форму шифрования, что ужасно сказать: D - person Alex; 28.12.2016
comment
основная форма шифрования от всех, у кого нет алгоритма декодирования base64 rofl: D - person Eladian; 09.10.2017
comment
@Alex Совсем не ужасно сказать. Конфиденциальные данные второй степени можно закодировать в формате base64, чтобы администраторы БД не могли их прочитать. Не всегда необходимо иметь наивысший уровень шифрования для каждой части данных. Например, если вы хотите скрыть комментарии от администратора БД, то для работы подойдет base64. Благодарности! - person Basil Musa; 27.01.2018
comment
Стоит упомянуть, что MySQL теперь поддерживает весь Unicode, хотя для целей обратной совместимости их тип utf8 по-прежнему имеет только трехбайтовый формат; если вам нужна настоящая вещь, используйте utf8mb4. Хороший хак, но больше не нужен. - person TRiG; 03.04.2018
comment
начиная с MySQL 5.6.1 SELECT FROM_BASE64('YmFzZTY0IGVuY29kZWQgc3RyaW5n'); создайте временную таблицу или представление, и вы можете прочитать эти зашифрованные комментарии = P - person alo Malbarez; 24.10.2018
comment
Мне этот хак очень нравится. Собственно сам пользуюсь. Я так устал от плохих драйверов базы данных, которые не могут правильно обрабатывать utf-8. Итак, я делаю это: вместо select c from t я делаю select encode_as_base64(c) from t, а затем декодирую это в клиенте. Это уродливый хакер, но он работает даже с худшими драйверами odbc. - person Juraj; 05.06.2020
comment
Вы можете продать это как функцию, в которой строки базы данных используют базовую форму шифрования. Мне нравится ваш стиль :-) - person Alexander; 09.06.2020

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

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

Еще один пример: uenc = url encoded = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = loc.querytip.com/asics-men-s-gel-kayano-xii.html.

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

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

person jmr333    schedule 21.09.2017

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

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

person Can Berk Güder    schedule 14.10.2008

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

[В питоне]

import base64
imageAsBytes = base64.b64decode( dataFromWS )
person Andrew Cox    schedule 14.10.2008
comment
Данные перемещаются быстрее? - person FelipeM; 07.12.2017
comment
@FelipeM медленнее, а не быстрее. У Base64 накладные расходы 33% (по цене безопасности). - person Juraj; 05.06.2020

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

person Eric Tuttleman    schedule 14.10.2008

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

person Paul Tomblin    schedule 14.10.2008

Base64

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

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

person mugil k    schedule 10.10.2013

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

MD5 генерирует 128-битный вывод, который представлен последовательностью из 32 шестнадцатеричных цифр, которые, в свою очередь, составляют 32 * 4 = 128 бит. 128 бит составляют 16 байтов (поскольку 1 байт равен 8 битам).

Каждый символ Base64 кодирует 6 бит (за исключением последнего символа, не являющегося заполнителем, который может кодировать 2, 4 или 6 бит; и заключительных символов заполнения, если таковые имеются). Таким образом, для кодировки Base64 128-битный хэш требует не менее 128 / 6⌉ = 22 символа, плюс дополнение, если таковое имеется.

Используя base64, мы можем создать закодированный вывод желаемой длины (6, 8 или 10). Если мы выберем вывод длиной 8 символов, он будет занимать только 8 байтов, тогда как для 128-битного хеш-вывода он занимал 16 байтов.

Таким образом, в дополнение к безопасности, кодировка base64 также используется для уменьшения занимаемого пространства.

person Jainabhi    schedule 10.01.2020

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

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

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

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

person Jody Fitzpatrick    schedule 23.02.2014
comment
Вы слишком буквально истолковываете определение шифрования far. Слово превратилось в нечто более конкретное, чем его происхождение. - person Dan Bechard; 05.06.2015