Преобразование Base64 объяснено Что это такое, что это не так, и когда его использовать

Опубликовано
Энкодирование Base64 объяснено: что это такое, что это не такое и когда его использовать
Реклама · УДАЛИТЬ?

Если вы когда-либо видели стену букв как SGVsbG8gV29ybGQ= и предположили, что она зашифрована — вы не единственные. Base64 — один из самых непонятных инструментов в арсенале разработчика. нет шифрование. Оно не защищает ваших данных. Оно лишь делает бинарные данные безопасными для перемещения через текстовые системы.

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

Баз64 — это схема кодирования, преобразующая бинарные данные в строку из 64 печатаемых символов АЗаяЦ09. +и /Название происходит от размера этого набора символов — 64 символа, каждый из которых представляет собой 6 бит данных.

Каждые три байта входных данных (24 бита) соответствуют четырём символам Base64 (4 × 6 бит = 24 бита). Если длина ввода не делится на 3, = Заполнительные символы заполняют последний набор. Вот почему часто можно увидеть один или два равенства в конце строки Base64.

Почему он существует

Некоторые каналы были построены исключительно для текстовых данных. Старые протоколы электронной почты (SMTP), HTTP-заголовки, JSON-пайлоты и атрибуты HTML имеют ограничения на то, какие байты они могут передавать без неправильной интерпретации. Файл с бинарным содержимым, прошедший через такие каналы, может быть повреждён — нулевые байты удалены, символы новой строки преобразованы, контрольные символы вызывают неожиданное поведение.

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

Как работает кодировка (краткий вариант)

Возьмите строку ManВ аск-кодировке: 77 97 110В двоичном коде: 01001101 01100001 01101110Разделите на группы по 6 бит: 010011 010110 000101 101110Создайте отображение каждой буквы на алфавит Base64: T W F uTWFu.

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

Базовый 64 не является безопасностью

Это нужно повторить ещё раз. Base64 обратимый для любого человека с декодером — ни ключа не требуется, ни пароля. Использование его для «скрытия» паролей, токенов или чувствительных данных в коде клиента обеспечивает нулевую защиту. Атакующие знают, что такое Base64. Последняя = дарительский розыгрыш

Если вам нужно защитить данные в состоянии покоя, используйте правильное шифрование (AES-256). Если требуется защита данных в пути, используйте TLS. Base64 — это удобство транспортировки, а не слой безопасности.

Когда использовать Base64

  • URL-адреса данных встраивайте изображения напрямую в HTML или CSS: src="data:image/png;base64,iVBOR..."
  • Базовый аутентификационный заголовок — Аутентификация базовой строки (Basic Auth) кодирует username:password в кодировке Base64 Authorization заголовок (ещё требует HTTPS для реальной безопасности)
  • Токены JWT — Токены JSON Web Token используют Base64URL для кодирования секций заголовка и загрузки.
  • Пayloadы в формате JSON/XML — когда API или формат сообщения говорит только текстом
  • Вложения электронной почты — Кодировка MIME использует Base64 для бинарных частей файлов

Для быстрой кодировки и декодировки в вашем браузере. Энкодер/декодер на основе Base64 для IO Tools обрабатывает как стандартные, так и безопасные для URL варианты без установки ничего.

Энкодирование и декодирование на практике

Питон

import base64

# Encode
encoded = base64.b64encode(b"Hello, World!")
print(encoded)  # b'SGVsbG8sIFdvcmxkIQ=='

# Decode
decoded = base64.b64decode(b"SGVsbG8sIFdvcmxkIQ==")
print(decoded)  # b'Hello, World!'

Bash

# Encode
echo -n "Hello, World!" | base64
# SGVsbG8sIFdvcmxkIQ==

# Decode
echo "SGVsbG8sIFdvcmxkIQ==" | base64 --decode
# Hello, World!

ЯваСкрипт (браузер и Node.js)

// Encode (browser)
const encoded = btoa("Hello, World!");
console.log(encoded); // SGVsbG8sIFdvcmxkIQ==

// Decode (browser)
const decoded = atob("SGVsbG8sIFdvcmxkIQ==");
console.log(decoded); // Hello, World!

// Node.js
const enc = Buffer.from("Hello, World!").toString("base64");
const dec = Buffer.from(enc, "base64").toString("utf8");

Примечание: btoa и atob только обрабатывайте символы латиницы в браузерах. Для строк с Юникодом сначала преобразуйте их в байтовую представление. TextEncoder.

Стандартный против URL-безопасного Base64

Базовая кодировка Base64 использует + и / — оба символа с особым значением в URL и строках запросов. Безопасный для URL Base64 заменяет их, чтобы избежать проблем кодировки:

СвойствоБазовая система Base64Базовый 64 в безопасном URL-формате
Система кодировкиА–З, а–з, 0–9, Буквы алфавита и цифры от нуля до девяти. +, /А–З, а–з, 0–9, Буквы алфавита и цифры от нуля до девяти. -, _
Прокладка= Обязательно= (часто опускается)
Совместимый с URL?Нет + и / должно быть кодированным в процентахДа — безопасно в URL и именах файлов
Общественное использованиеЭлектронная почта, MIME, общая кодировкаТокены JWT, OAuth, параметры URL

В Python используйте base64.urlsafe_b64encode() для безопасного вывода по URL. В частности, JWT удаляет завершающий символ = Отступы — это нормально, так как декодер может вывести их из длины строки.

Практическое понимание

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

Хотите убрать рекламу? Откажитесь от рекламы сегодня

Установите наши расширения

Добавьте инструменты ввода-вывода в свой любимый браузер для мгновенного доступа и более быстрого поиска

в Расширение Chrome в Расширение края в Расширение Firefox в Расширение Opera

Табло результатов прибыло!

Табло результатов — это интересный способ следить за вашими играми, все данные хранятся в вашем браузере. Скоро появятся новые функции!

Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?

новости с техническими моментами

Примите участие

Помогите нам продолжать предоставлять ценные бесплатные инструменты

Купи мне кофе
Реклама · УДАЛИТЬ?