Я слышал, как люди говорят о "кодировке base 64" то тут, то там. Для чего это используется?
Для чего используется кодировка base 64?
Ответы (18)
Когда у вас есть двоичные данные, которые вы хотите передать по сети, вы обычно не делаете это, просто передавая биты и байты по сети в необработанном формате. Почему? потому что некоторые носители предназначены для потоковой передачи текста. Вы никогда не знаете - некоторые протоколы могут интерпретировать ваши двоичные данные как управляющие символы (например, модем), или ваши двоичные данные могут быть испорчены, потому что базовый протокол может подумать, что вы ввели специальную комбинацию символов (например, как FTP переводит строку концовки).
Чтобы обойти это, люди кодируют двоичные данные в символы. Base64 - один из таких типов кодировок.
Почему 64?
Потому что обычно можно полагаться на те же 64 символа, присутствующие во многих наборах символов, и вы можете быть достаточно уверены, что ваши данные окажутся на другой стороне сети. неповрежденный.
base 64
относится к системе счисления, а не к количеству символов в наборе. Нет?
- person Tom Russell; 04.05.2017
По сути, это способ кодирования произвольных двоичных данных в тексте ASCII. Требуется 4 символа на 3 байта данных плюс, возможно, небольшой отступ в конце.
По сути, каждые 6 битов ввода кодируются 64-символьным алфавитом. «Стандартный» алфавит использует A-Z, a-z, 0-9 и + и /, с = в качестве символа заполнения. Есть URL-безопасные варианты.
Википедия - достаточно хороший источник дополнительной информации.
binary strings
. (источник) php.net/manual/en/function.pack.php
- person Cholthi Paul Ttiopic; 28.02.2019
Кодирование Base-64 - это способ преобразования двоичных данных в текст, чтобы его было легче передавать в таких вещах, как электронная почта и данные HTML-форм.
http://en.wikipedia.org/wiki/Base64
Это текстовое кодирование двоичных данных, в котором в результирующем тексте есть только буквы, цифры и символы «+», «/» и «=». Это удобный способ хранения / передачи двоичных данных через носитель, который специально используется для текстовых данных.
Но почему именно Base-64? На ум сразу приходят две альтернативы преобразования двоичных данных в текст:
- Десятичный: сохраните десятичное значение каждого байта в виде трех чисел: 045 112 101 037 и т. Д., Где каждый байт представлен 3 байтами. Данные раздуваются в три раза.
- Шестнадцатеричный: храните байты в виде шестнадцатеричных пар: AC 47 0D 1A и т. Д., Где каждый байт представлен двумя байтами. Данные раздуваются вдвое.
Base-64 отображает 3 байта (8 x 3 = 24 бита) в 4 символа, охватывающие 6 бит (6 x 4 = 24 бита). Результат выглядит примерно так: «TWFuIGlzIGRpc3Rpb ...». Следовательно, вздутие живота всего лишь в 4/3 = 1,3333333 раза больше исходного.
Много лет назад, когда была введена функция рассылки, которая была полностью основана на тексте, со временем возникла потребность во вложениях, таких как изображения и мультимедиа (аудио, видео и т. Д.). Когда эти вложения отправляются через Интернет (в основном в виде двоичных данных), вероятность повреждения двоичных данных в необработанном виде высока. Итак, для решения этой проблемы появился 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 ==»
Помимо того, что уже было сказано, есть два очень распространенных использования, которые не были перечислены:
Хеши:
Хэши - это односторонние функции, которые преобразуют блок байтов в другой блок байтов фиксированного размера, например 128 или 256 бит (SHA / MD5). Преобразование полученных байтов в Base64 значительно упрощает отображение хэша, особенно когда вы сравниваете контрольную сумму на предмет целостности. Хеши так часто встречаются в Base64, что многие люди принимают сам Base64 за хеш.
Криптография:
Поскольку ключ шифрования не обязательно должен быть текстом, а должен быть необработанными байтами, иногда необходимо сохранить его в файле или базе данных, для чего удобно использовать Base64. То же самое с полученными зашифрованными байтами.
Обратите внимание, что хотя Base64 часто используется в криптографии, это не механизм безопасности. Любой может преобразовать строку Base64 обратно в исходные байты, поэтому ее не следует использовать как средство защиты данных, а только как формат для более простого отображения или хранения необработанных байтов.
Сертификаты
Сертификаты x509 в формате PEM имеют кодировку base 64. http://how2ssl.com/articles/working_with_pem_files/
На заре компьютеров, когда межсистемная связь по телефонной линии не была особенно надежной, использовался быстрый и грязный метод проверки целостности данных: «битовая четность». В этом методе каждый переданный байт будет иметь 7 бит данных, а 8-й будет равен 1 или 0, чтобы общее количество 1 бит в байте было четным.
Следовательно, 0x01 будет передаваться как 0x81; 0x02 будет 0x82; 0x03 останется 0x03 и т. Д.
Для дальнейшего развития этой системы, когда был определен набор символов ASCII, только 00-7F были присвоены символы. (До сих пор все символы, установленные в диапазоне 80-FF, нестандартны)
Многие современные маршрутизаторы внедряют проверку четности и байтовую трансляцию в оборудование, заставляя подключенные к ним компьютеры работать строго с 7-битными данными. Это заставляет вложения электронной почты (и все другие данные, поэтому протоколы HTTP и SMTP основаны на тексте) для преобразования в текстовый формат.
Немногие из маршрутизаторов дожили до 90-х годов. Я очень сомневаюсь, что кто-то из них сегодня используется.
Из 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.
Некоторые транспортные протоколы позволяют передавать только буквенно-цифровые символы. Только представьте себе ситуацию, когда управляющие символы используются для запуска специальных действий и / или поддерживают только ограниченную битовую ширину на символ. Base64 преобразует любой ввод в кодировку, в которой используются только буквенно-цифровые символы, +
, /
и =
в качестве символ заполнения.
Использование Base64, которое я собираюсь здесь описать, является своего рода уловкой. Так что, если вам не нравятся хаки, пожалуйста, не продолжайте.
У меня возникли проблемы, когда я обнаружил, что MySQL utf8 не поддерживает 4-байтовые символы Unicode, поскольку он использует 3-байтовую версию utf8. Итак, что я сделал для поддержки полного 4-байтового юникода поверх MySQL utf8? Ну, base64 кодирует строки при сохранении в базу данных и base64 декодирует при извлечении.
Поскольку кодирование и декодирование base64 происходит очень быстро, все вышеперечисленное сработало отлично.
Вы должны принять к сведению следующие моменты:
Кодировка Base64 использует на 33% больше памяти
Строки, хранящиеся в базе данных, не будут удобочитаемы (вы можете продать это как функцию, в которой строки базы данных используют базовую форму шифрования).
Вы можете использовать описанный выше метод для любого механизма хранения, не поддерживающего Unicode.
utf8
по-прежнему имеет только трехбайтовый формат; если вам нужна настоящая вещь, используйте utf8mb4
. Хороший хак, но больше не нужен.
- person TRiG; 03.04.2018
SELECT FROM_BASE64('YmFzZTY0IGVuY29kZWQgc3RyaW5n');
создайте временную таблицу или представление, и вы можете прочитать эти зашифрованные комментарии = P
- person alo Malbarez; 24.10.2018
select c from t
я делаю select encode_as_base64(c) from t
, а затем декодирую это в клиенте. Это уродливый хакер, но он работает даже с худшими драйверами odbc.
- person Juraj; 05.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/ »
Он используется для преобразования произвольных двоичных данных в текст ASCII.
Например, таким образом отправляются вложения электронной почты.
Я использую его в практическом смысле, когда мы передаем большие двоичные объекты (изображения) через веб-службы. Поэтому, когда я тестирую веб-службу C # с помощью скрипта Python, бинарный объект можно воссоздать с помощью небольшого волшебства.
[В питоне]
import base64
imageAsBytes = base64.b64decode( dataFromWS )
В основном я видел, что он используется для кодирования двоичных данных в контекстах, которые могут обрабатывать только ascii - или простые - наборы символов.
Чтобы немного расширить то, что говорит Брэд: многие транспортные механизмы для электронной почты, Usenet и других способов перемещения данных не являются «8-битными чистыми», что означает, что символы вне стандартного набора символов ascii могут быть искажены при передаче - например, 0x0D можно рассматривать как возврат каретки и превращать в возврат каретки и перевод строки. Base 64 отображает все двоичные символы в несколько стандартных букв, цифр и знаков препинания ascii, поэтому они не будут искажены таким образом.
Base64
Base64 - это общий термин для ряда аналогичных схем кодирования, которые кодируют двоичные данные, обрабатывая их численно и переводя в представление base 64. Термин Base64 происходит от конкретной кодировки передачи содержимого MIME.
Схемы кодирования Base64 обычно используются, когда необходимо кодировать двоичные данные, которые необходимо хранить и передавать на носителях, предназначенных для работы с текстовыми данными. Это необходимо для того, чтобы данные оставались неизменными без изменений во время транспортировки. Base64 обычно используется в ряде приложений, включая электронную почту через MIME и хранение сложных данных в XML.
Одна шестнадцатеричная цифра состоит из одного полубайта (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 также используется для уменьшения занимаемого пространства.
Base64 можно использовать для многих целей.
Основная причина - преобразовать двоичные данные во что-то приемлемое.
Иногда я использую его для передачи данных JSON с одного сайта на другой, хранения информации о пользователе в файлах cookie.
Примечание: вы «можете» использовать его для шифрования - я не понимаю, почему люди говорят, что вы не можете, и что это не шифрование, хотя его легко взломать, и это не одобряется. Шифрование означает не что иное, как преобразование одной строки данных в другую строку данных, которая может быть либо позже расшифрована, либо нет, и это то, что делает base64.