Что такое кодировка Base64? Простое руководство на английском языке (и почему это не шифрование)

11 июля 2026 г. · 8 мин. чтения
Открыть инструментКодер/декодер Base64 →

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

Что такое Base64 на самом деле

Base64 — это способ представления двоичных данных, любых байтов, с использованием всего 64 печатных текстовых символов: 26 заглавных букв, 26 строчных букв, 10 цифр и двух символов, плюс (+) и косая черта (/). Знак равенства (=) используется в качестве дополнения в конце. Это весь алфавит, отсюда и название. Каждый символ в выводе Base64 представляет собой безопасный печатный символ без управляющих кодов или неоднозначных пробелов, в чем и состоит суть.

Причина его существования исторична и до сих пор актуальна. Основные протоколы Интернета, электронная почта через SMTP, заголовки HTTP и другие, были разработаны для обычного текста. Если передать им необработанные двоичные данные, такие как изображение или зашифрованный объект, некоторые байтовые значения будут ошибочно интерпретированы как управляющие символы и повредят данные. Base64 решает эту проблему путем преобразования двоичного кода в подмножество текста, которое сохраняется в любом текстовом канале. Это переводчик между двоичным миром и текстовым миром.

Как это работает, коротко

Алгоритм принимает входные данные по три байта за раз. Три байта — это 24 бита, которые разбиваются на четыре группы по 6 бит каждая, и каждая 6-битная группа соответствует одному из 64 символов. Таким образом, каждые 3 байта ввода превращаются в ровно 4 символа вывода. Если ваш ввод не кратен 3 байтам, Base64 дополняет вывод знаками равенства: один =, если последняя группа имела 2 байта, два ==, если она имела только 1 байт, поэтому результат всегда кратен 4 символам. Вот что означают эти конечные знаки равенства: они сообщают декодеру, сколько реальных байтов было в последней группе.

Это соотношение 3 к 4 имеет прямое следствие: выходные данные Base64 примерно на 33% больше исходных данных. Изображение размером 1 МБ становится закодированным размером примерно 1,37 МБ. Эти накладные расходы на размер — это цена, которую вы платите за безопасность текста, и именно поэтому Base64 отлично подходит для небольших задач и является плохим выбором для больших.

Где вы встретите Base64

Base64 можно найти повсюду, если знать, куда смотреть. URL-адреса данных встраивают файл непосредственно в HTML или CSS, data:image/png;base64,... вы иногда видите в теге изображения или стиле фона, позволяя небольшому значку загружаться вместе со страницей, а не в виде отдельного запроса. Вложения электронной почты закодированы в формате Base64, поэтому двоичные файлы выдерживают транспортировку текстовой почты; каждое вложение, которое вы когда-либо отправляли, перемещалось по этому пути, поэтому необработанный файл электронной почты больше, чем файл, который он содержит.

Веб-токены JSON (JWT) кодируют свой заголовок и полезную нагрузку в URL-безопасном варианте Base64. Базовая аутентификация HTTP отправляет ваше имя пользователя и пароль в заголовке в формате Base64. API, которые принимают загрузку файлов внутри тела JSON, кодируют файл в формате Base64, поскольку JSON является текстовым и не может хранить необработанные байты. А файлы PEM, сертификаты SSL, ключи SSH представляют собой двоичные файлы в кодировке Base64, заключенные между строками заголовков BEGIN и END. В основе всего этого лежит одна и та же простая кодировка.

Опасный миф: Base64 — это не шифрование

Это самая важная вещь, которую нужно понять, потому что неправильное ее выполнение приводит к реальным нарушениям безопасности. Base64 не обеспечивает нулевую безопасность. Это не шифрование. Любой, у кого есть закодированная строка, может мгновенно, без ключа, декодировать ее в одну строку в любой консоли браузера. Строка c2VjcmV0 декодируется в «секретную» примерно за одну секунду.

Опасность исходит от того, как выглядит Base64. Строка Base64 выглядит зашифрованной и случайной, визуально похожей на зашифрованные данные, что заставляет людей думать, что она защищена. Это приводит к реальным инцидентам: разработчик передает файл конфигурации с учетными данными базы данных в кодировке Base64 в систему контроля версий, полагая, что кодировка их скрывает, но это не так. API регистрирует заголовок авторизации, и рецензент «не может прочитать» пароль Base64, поэтому он сохраняется в журналах как обычный текст, пока кто-нибудь не декодирует его за пять секунд. Хранение ключа API в базе данных в формате Base64 выглядит непрозрачно, но ничего не защищает.

Если конфиденциальность имеет значение, используйте настоящее шифрование (например, AES через Web Crypto API), а для паролей используйте медленный хеш, например bcrypt или Argon2. Base64 предназначен для представления и транспортировки, а не для сокрытия данных.

URL-безопасный Base64 (Base64url)

Стандартный Base64 использует + и /, но оба имеют особое значение в URL-адресах, + может означать пробел в строке запроса, а / ограничивает сегменты пути. Таким образом, безопасный для URL-адресов вариант под названием Base64url заменяет + на - (минус) и / на _ (подчеркивание) и обычно удаляет заполнение =, которое в противном случае потребовало бы процентного кодирования в URL-адресе. Это вариант, который используют JWT, токены OAuth и файлы cookie, безопасные для URL-адресов. Если вы когда-либо передаете сегмент JWT в строгий стандартный декодер Base64 и получаете ошибку или мусор, обычно это происходит по этой причине: вам нужно преобразовать URL-безопасные символы обратно и сначала восстановить заполнение.

Юникод попался

Одна тонкая ошибка встречается у разработчиков, которые кодируют неанглийский текст с помощью Base64. Классическая функция браузера btoa() предполагает, что каждый символ представляет собой один байт, который разбивается на буквы с диакритическими знаками, эмодзи или любой нелатинский шрифт. Исправление состоит в том, чтобы сначала закодировать текст как UTF-8, а затем закодировать полученные байты в Base64, в противном случае слова «café» или «こんにちは» будут повреждены. Хороший кодировщик выполнит этот шаг UTF-8 за вас, поэтому текст с акцентами и смайлы будут передаваться аккуратно.

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

Когда его использовать, когда его следует избегать

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

Открыть инструментКодер/декодер Base64 →