Skip to content

Latest commit

 

History

History
38 lines (22 loc) · 4.43 KB

base64.md

File metadata and controls

38 lines (22 loc) · 4.43 KB

Base64

Base64 — стандарт кодирования двоичных данных при помощи только 64 символов ASCII. Алфавит кодирования содержит текстово-цифровые латинские символы A-Z, a-z и 0-9 (62 знака) и 2 дополнительных символа, зависящих от системы реализации. Каждые 3 исходных байта кодируются 4 символами (увеличение на ¹⁄₃).

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

Как работает Base64

Метод кодирования Base64 относиться к группе binary-to-text encoding схем, которые преобразуют набор байтов в строковый ASCII формат.

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

Алгоритм

На самом деле, все что делает алгоритм, это переводит набор битов в индексы заранее известной строки в 64 символа.

По стандарту RFC 4648 для кодирования используется следующая строка:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

{% hint style="info" %} Как можно заметить в строке не 64 символа, а 65. Последний символ нужен для обработки особых случаев {% endhint %}

Преобразование байтов в символы ASCII происходит итеративно, группами по 3 байта или 24 бита.

Если в выбранной группе, байтов меньше чем 3, тогда недостающие байты конвертируются в 65 символ.

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

Применение

  • Base64 полезен там, где нужно отправлять небольшие бинарные данные вместе с текстовыми, например для сокращения http запросов за ресурсами;
  • С помощью Base64 можно генерировать hash. Такая техника используется в webpack при генерации имен css классов или имен файлов;
  • Base64 увеличивает размер файла. Например при применении алгоритма к png картинке весящей 1.9Mb на выходе получаем 2.5Mb (В среднем размер файла выростает на 25%);
  • Base64 плохо подходит для кодирования встраиваемого текстового контента, например SVG, XML и т.д. При кодировании такого контента мы увеличиваем время на парсинг и ухудшаем эффективность сжатия.