Что такое Base64 и почему оно постоянно встречается
Эта странная текстовая строка в твоём коде — не абракадабра. Вот что это на самом деле означает.
Ты отлаживаешь API. Где-то в ответе ты видишь это:
SGVsbG8gV29ybGQh
Или ты смотришь на исходный код электронного письма и находишь куски текста, похожие на бессмысленный набор клавиш. Или в твоём CSS есть фоновое изображение, которое начинается с data:image/png;base64,, за которым следует стена символов.
Это Base64. Оно везде, как только начинаешь замечать.
Что такое Base64 на самом деле
Бинарные данные — изображения, файлы, всё, что не является простым текстом — плохо ладят с системами, созданными для текста. Email был создан для символов ASCII. URL-адреса имеют ограниченный набор символов. JSON не обрабатывает чистые бинарные данные.
Base64 преобразует бинарные данные в строку из 64 "безопасных" символов: A-Z, a-z, 0-9, + и /. Любой бинарный файл становится текстовой строкой, которая не сломается при передаче через текстовые системы.
Это не шифрование. Это не сжатие. Это просто кодирование — другой способ представления тех же данных.
Где ты это увидишь
Вложения в email. Когда ты отправляешь PDF по электронной почте, он кодируется в Base64, передается как текст, а затем декодируется на другом конце.
Data URI. Синтаксис data:image/png;base64,... встраивает изображения прямо в HTML или CSS. Не нужен отдельный запрос файла.
Аутентификация API. Базовая аутентификация отправляет username:password как строку Base64. (Вот почему базовая аутентификация через HTTP небезопасна — Base64 это не шифрование.)
JWT. JSON Web Tokens — это три Base64-кодированных JSON-объекта, соединенных точками.
Бинарные данные в JSON. JSON не может включать сырые байты, поэтому бинарные данные сначала кодируются в Base64.
Кодирование vs шифрование
Люди постоянно путают эти понятия.
Кодирование Base64: Обратимо для всех. Ключ не нужен. Не безопасно. Просто переформатирование.
Шифрование: Обратимо только с правильным ключом. Действительно безопасно.
Если ты можешь декодировать что-то без пароля, это не зашифровано. Base64 "скрывает" данные только от людей, которые не знают, что такое Base64 — а таких нет среди тех, кто действительно хочет это прочитать.
Не храни пароли в Base64. Не предполагай, что данные Base64 в API приватны. Это просто текст, который выглядит странно.
Проблема размера
Base64 увеличивает размер данных примерно на 33%. Изображение в 100KB становится ~133KB при кодировании в Base64.
Это имеет значение для data URI. Встраивание большого изображения в Base64 в твой CSS делает файл больше и не может кэшироваться отдельно. Хорошо для крошечных иконок. Плохо для больших изображений.
Практическое применение
Отладка. Видишь Base64 в ответе API? Декодируй, чтобы увидеть, что внутри.
Встраивание маленьких изображений. Иконки размером менее 1-2KB часто стоит встраивать как data URI, чтобы сэкономить HTTP-запросы.
Передача бинарных данных через текстовые каналы. Нужно включить содержимое файла в JSON? Закодируй его в Base64.
Чтение JWT. Декодируй каждую секцию, чтобы увидеть заголовок, полезную нагрузку и понять, какие утверждения содержит токен.
Base64 не сложен. Это просто способ превратить любые данные в текстовую строку. Распознавай его, декодируй при необходимости и помни, что он не обеспечивает безопасности — только совместимости.