16 ответов:
когда у вас есть некоторые двоичные данные, которые вы хотите отправить по сети, вы обычно не делаете этого, просто передавая биты и байты по проводу в необработанном формате. Зачем? потому что некоторые носители сделаны для потоковой передачи текста. Вы никогда не знаете -- некоторые протоколы могут интерпретировать ваши двоичные данные как управляющие символы (например, модем), или ваши двоичные данные могут быть испорчены, потому что базовый протокол может подумать, что вы ввели специальную комбинацию символов (например, как FTP переводит строку окончания.)
поэтому, чтобы обойти это, люди кодируют двоичные данные в символы. Base64 является одним из таких типов кодировок.
почему 64?
Поскольку вы обычно можете полагаться на те же самые 64 символа, присутствующие во многих наборах символов, и вы можете быть достаточно уверены, что ваши данные окажутся на другой стороне провода неповрежденными.
Это в основном способ кодирования произвольных двоичных данных в ASCII текст. Он занимает 4 символа на 3 байта данных, плюс потенциально немного заполнения в конце.
по существу каждый 6 бит входного сигнала кодируется в 64-символьном алфавите. "Стандартный" алфавит использует A-Z, a-z, 0-9 и + и /, С = в качестве символа заполнения. Есть URL-безопасные варианты.
Википедия является достаточно хорошим источником дополнительной информации.
кодировка Base-64-это способ взять двоичные данные и превратить их в текст, чтобы они легче передавались в таких вещах, как электронная почта и данные HTML-формы.
Это текстовое представление бинарных данных, где результирующий текст не имеет ничего, кроме букв, цифр и символов "+", "/" и "=". Это удобный способ хранения / передачи двоичных данных через носитель, который специально используется для текстовых данных.
но почему база-64? Две альтернативы для преобразования двоичных данных в текст, которые сразу приходят на ум:
- десятичное: хранить десятичное значение каждого байта, а три номера: 045 112 101 037 и т. д. где каждый байт представлен 3 байтами. Данные раздуваются в три раза.
- шестнадцатеричный: хранить байты в виде шестнадцатеричных пар: 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 используется для кодирования двоичных файлов, таких как изображения в скриптах, чтобы избежать зависимости от внешних файлов.
- может использоваться для встраивания необработанных данных изображения в a CSS свойство, такое как фоновое изображение.
в первые дни компьютеров, когда телефонная линия межсистемной связи не была особенно надежной, использовался быстрый и грязный метод проверки целостности данных: "битовая четность". В этом методе каждый переданный байт будет иметь 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-байтовые символы юникода, поскольку он использует 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.
Comments