🔐
← Назад к руководствам

Что такое Base64? Полное руководство для начинающих

· Теги: base64, encoding, binary-to-text, web-development, data-transfer

Что такое кодирование Base64?

Base64 — это схема кодирования бинарных данных в текст, которая представляет двоичные данные в формате строки ASCII, используя алфавит из 64 символов. Изначально она была разработана для вложений электронной почты через MIME (Multipurpose Internet Mail Extensions) и остаётся одним из наиболее широко используемых методов кодирования в вебе.

Когда вам нужно отправить бинарные данные — такие как изображение, файл или сжатые байты — по каналу, который был создан для текста, Base64 является основным решением. Он берёт произвольные байты и превращает их в безопасную, переносимую строку из букв, цифр и пары специальных символов.

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

Base64 работает путём обработки бинарных данных группами по три байта (24 бита) и преобразования каждой группы в четыре символа Base64. Название «Base64» происходит от того факта, что алфавит кодирования использует 64 различных символа: A-Z, a-z, 0-9, + и /.

Алгоритм кодирования по шагам

  1. Возьмите 3 байта (24 бита) входных данных
  2. Разделите их на четыре 6-битные группы
  3. Сопоставьте каждое 6-битное значение (0-63) с таблицей алфавита Base64
  4. Добавьте дополнение (=), если длина ввода не делится на 3

Вот конкретный пример. Строка "Man" кодируется следующим образом:

  • M (ASCII 77) = 01001101
  • a (ASCII 97) = 01100001
  • n (ASCII 110) = 01101110

Объединённые: 01001101 01100001 01101110 → разделены на 6-битные группы:

  • 010011 = 19 → T
  • 010110 = 22 → W
  • 000101 = 5 → F
  • 101110 = 46 → u

Таким образом, "Man" превращается в "TWFu".

Что насчёт дополнения?

Если длина ввода не кратна 3 байтам, Base64 добавляет символы дополнения (=), чтобы сделать вывод кратным 4 символам:

  • 1 байт ввода → 2 символа Base64 + 2 символа дополнения (==)
  • 2 байта ввода → 3 символа Base64 + 1 символ дополнения (=)

Например, один байт, соответствующий "M", кодируется как TQ==.

Таблица алфавита Base64

| Знач. | Симв. | Знач. | Симв. | Знач. | Симв. | Знач. | Симв. | |-------|------|-------|------|-------|------|-------|------| | 0 | A | 16 | Q | 32 | g | 48 | w | | 1 | B | 17 | R | 33 | h | 49 | x | | 2 | C | 18 | S | 34 | i | 50 | y | | 3 | D | 19 | T | 35 | j | 51 | z | | 4 | E | 20 | U | 36 | k | 52 | 0 | | 5 | F | 21 | V | 37 | l | 53 | 1 | | 6 | G | 22 | W | 38 | m | 54 | 2 | | 7 | H | 23 | X | 39 | n | 55 | 3 | | 8 | I | 24 | Y | 40 | o | 56 | 4 | | 9 | J | 25 | Z | 41 | p | 57 | 5 | | 10 | K | 26 | a | 42 | q | 58 | 6 | | 11 | L | 27 | b | 43 | r | 59 | 7 | | 12 | M | 28 | c | 44 | s | 60 | 8 | | 13 | N | 29 | d | 45 | t | 61 | 9 | | 14 | O | 30 | e | 46 | u | 62 | + | | 15 | P | 31 | f | 47 | v | 63 | / |

Распространённые сценарии использования кодирования Base64

Вложения электронной почты (MIME)

Base64 был создан для MIME (Multipurpose Internet Mail Extensions). Почтовые протоколы, такие как SMTP, были разработаны для 7-битного текста ASCII, поэтому бинарные вложения, такие как PDF, изображения и ZIP-файлы, должны быть закодированы в Base64 перед отправкой по электронной почте.

Data URL в HTML и CSS

Base64 позволяет встраивать изображения, шрифты и другие медиафайлы непосредственно в HTML или CSS с помощью data URL:

<img src="data:image/png;base64,iVBORw0KGgo..." alt="Embedded Image" />

Это устраняет дополнительный HTTP-запрос, что может быть полезно для небольших ресурсов.

JSON Web Tokens (JWT)

JWT используют URL-безопасный вариант Base64 (Base64url) для кодирования заголовка, полезной нагрузки и подписи каждого токена. Именно поэтому вы видите строки вида eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 в системах аутентификации.

Хранение бинарных данных в базах данных

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

Нагрузки API

При отправке бинарных данных через REST или GraphQL API — особенно в формате JSON — Base64 является стандартным выбором, поскольку JSON не может нативно представлять сырые байты.

Увеличивает ли Base64 размер файла?

Да. Кодирование Base64 увеличивает размер данных примерно на 33%. На каждые 3 байта ввода вы получаете 4 байта вывода. Эти накладные расходы являются компромиссом за возможность передачи бинарных данных по каналам, предназначенным только для текста.

Является ли Base64 шифрованием?

Нет. Это распространённое заблуждение. Base64 — это схема кодирования, а не шифрования. Любой, кто получит строку Base64, может декодировать её обратно в исходные данные без необходимости в каком-либо ключе. Она не обеспечивает абсолютно никакой безопасности или конфиденциальности. Если вам нужно защитить данные, используйте шифрование (например, AES), а затем, при необходимости, закодируйте зашифрованные байты с помощью Base64 для передачи.

Base64 в сравнении с другими схемами кодирования бинарных данных в текст

| Кодирование | Размер алфавита | Накладные расходы | Лучше всего для | |----------|--------------|----------|----------| | Base64 | 64 симв. | ~33% | Передача данных и встраивание | | Base32 | 32 симв. | ~60% | Человекочитаемые, регистронезависимые контексты | | Base16 (Hex) | 16 симв. | 100% | Отладка, дампы памяти, цветовые коды | | Ascii85 | 85 симв. | ~25% | Adobe PostScript, потоки PDF |

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

Попробуйте кодирование Base64 онлайн

Готовы закодировать свои данные? Используйте наш бесплатный онлайн кодировщик и декодировщик Base64 для мгновенного преобразования текста или файлов прямо в браузере. Установка и регистрация не требуются.