Как закодировать и декодировать Base64 онлайн
Инструмент переводит текст в Base64 и обратно. Перед кодированием строка преобразуется в байты UTF-8, поэтому кириллица, эмодзи и любые символы Юникода кодируются корректно, а при декодировании байты снова собираются в текст UTF-8.
Всё работает в вашем браузере: введённые данные не отправляются на сервер PingDesk. Это важно, потому что в Base64 часто лежат токены, заголовки авторизации и фрагменты конфигураций — вставлять их в сервисы, которые обрабатывают данные на своей стороне, рискованно.
Ниже — как устроен Base64, откуда берутся знаки = в конце строки, чем отличается Base64URL и почему Base64 нельзя считать шифрованием.
Как пользоваться кодировщиком
- 1Выберите режим: Encode — закодировать текст в Base64, Decode — раскодировать Base64 обратно в текст.
- 2Вставьте данные в поле ввода. При декодировании пробелы и переносы строк внутри Base64 игнорируются, а отсутствующие знаки = в конце допускаются.
- 3Нажмите кнопку «Encode →» или «← Decode». Результат появится в поле ниже — скопируйте его значком копирования.
- 4Чтобы проверить преобразование, нажмите кнопку со стрелками между режимами: она переключит режим и перенесёт результат в поле ввода. Останется нажать кнопку преобразования и сравнить с исходником.
- 5Если появилась «Ошибка декодирования», проверьте, нет ли в строке символов - и _ (это Base64URL — замените их на + и /) и не закодированы ли в ней двоичные данные, например изображение: инструмент выводит результат только как текст UTF-8.
Как работает кодирование Base64
Base64 описан в RFC 4648. Он записывает произвольные байты строкой из 64 печатных символов: A–Z, a–z, 0–9, + и /. Входные данные делятся на группы по 3 байта (24 бита), каждая группа — на четыре блока по 6 бит, и каждый блок заменяется символом алфавита. Так 3 байта превращаются в 4 символа.
Отсюда главное свойство: результат примерно на треть длиннее исходника. Длина закодированной строки равна 4 × ⌈n / 3⌉, где n — число байт, то есть накладные расходы около 33 %. В почтовом формате MIME к этому добавляются переносы строк каждые 76 символов.
Если число байт не кратно трём, последнюю группу дополняют нулевыми битами, а недостающие символы заменяют знаком =. Поэтому в конце строки бывает ноль, один или два знака =, но никогда не больше двух, а длина корректной строки с padding всегда кратна четырём.
| Исходный текст | Байт в UTF-8 | Base64 | Padding |
|---|---|---|---|
| P | 1 | UA== | Два знака = |
| Pi | 2 | UGk= | Один знак = |
| Hello | 5 | SGVsbG8= | Один знак = |
| PingDesk | 8 | UGluZ0Rlc2s= | Один знак = |
| user:pass | 9 | dXNlcjpwYXNz | Нет: 9 кратно 3 |
| Привет | 12 | 0J/RgNC40LLQtdGC | Нет: 12 кратно 3 |
Кириллица и UTF-8: почему результат отличается от других сервисов
Base64 кодирует байты, а не символы. Прежде чем закодировать текст, его переводят в байты, и результат зависит от кодировки. Этот инструмент всегда использует UTF-8: латинская буква занимает 1 байт, кириллическая — 2, большинство эмодзи — 4. Поэтому слово «Привет» из шести букв превращается в 12 байт и 16 символов Base64.
Если другой сервис или старое приложение кодирует текст в Windows-1251, строка Base64 для того же слова будет другой. При декодировании такой строки здесь вы, скорее всего, получите ошибку: байты Windows-1251 обычно не образуют корректный UTF-8. Данные при этом не повреждены — их нужно декодировать в той кодировке, в которой они были закодированы.
В JavaScript встроенная функция btoa() принимает только символы Latin-1 и на кириллице падает с ошибкой InvalidCharacterError. Правильный путь — сначала получить байты через TextEncoder, а затем кодировать их; в Node.js — Buffer.from(text, "utf8").toString("base64"). В терминале Linux и macOS используйте echo -n 'Привет' | base64: флаг -n убирает перевод строки, который иначе попадёт в результат.
Base64URL: вариант для адресов, JWT и cookie
Символы + и / в обычном Base64 имеют особый смысл в URL: + в query-строке может превратиться в пробел, а / разделяет путь. Поэтому RFC 4648 описывает вариант Base64URL, в котором + заменён на -, а / — на _. Знаки = в конце в Base64URL часто опускают: длину можно восстановить, дополнив строку до кратной четырём.
Base64URL используется в JWT: заголовок и полезная нагрузка токена — это JSON, закодированный Base64URL без padding, а части разделены точками. Чтобы посмотреть содержимое JWT здесь, возьмите нужную часть между точками, замените - на + и _ на /, а затем декодируйте. Третья часть — подпись, это двоичные данные, и как текст она не декодируется.
| Base64 | Base64URL | |
|---|---|---|
| 62-й символ алфавита | + | - |
| 63-й символ алфавита | / | _ |
| Padding = | Обязателен | Обычно опускают |
| Где встречается | MIME, data URI, Basic Auth, PEM | JWT, параметры URL, cookie |
Где встречается Base64: Basic Auth, data URI, почта и ключи
Base64 нужен везде, где двоичные данные или произвольный текст приходится передавать через канал, рассчитанный на печатные ASCII-символы.
- HTTP Basic Auth. Заголовок Authorization: Basic dXNlcjpwYXNz — это Base64 от строки user:pass (RFC 7617). Любой, кто перехватил заголовок, получит логин и пароль, поэтому Basic Auth допустим только поверх HTTPS.
- Data URI. Небольшие файлы встраивают прямо в HTML и CSS: data:image/png;base64,iVBORw0KGgo… Для маленьких иконок это экономит запрос, но для крупных изображений лишние 33 % и отсутствие отдельного кэширования делают приём невыгодным.
- Электронная почта. Вложения и тело писем в MIME передаются в Base64 (Content-Transfer-Encoding: base64), потому что почтовые протоколы исторически рассчитаны на 7-битный текст.
- Ключи и сертификаты. Формат PEM — это Base64 от двоичных данных DER между строками -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----.
- Kubernetes Secrets. Значения в поле data секретов записаны в Base64 — это лишь способ хранить байты в YAML, а не защита.
- API. Файлы, подписи и изображения передают внутри JSON строками Base64, потому что JSON не умеет хранить байты напрямую.
Base64 — это не шифрование
Base64 не использует ключ: любой может декодировать строку за секунду, и результат однозначен. Строка cGFzc3dvcmQ= выглядит как что-то зашифрованное, но это просто слово password. Попытки «спрятать» пароль, токен или персональные данные в Base64 приводят к утечкам: такие строки находят в публичных репозиториях, логах и коде фронтенда.
Для конфиденциальности нужно шифрование — TLS при передаче, AES-GCM или аналогичный алгоритм при хранении, — а для контроля целостности — хеш или HMAC. Base64 можно применять поверх них, чтобы записать зашифрованные байты текстом, но сам по себе он ничего не защищает.
Частые вопросы
Как декодировать Base64 онлайн?
+
Выберите режим Decode, вставьте строку и нажмите «← Decode». Декодирование выполняется в браузере, данные не уходят на сервер. Если строка в формате Base64URL и содержит символы - и _, замените их на + и / перед декодированием.
Base64 шифрует данные?
+
Нет. Base64 — это кодирование без ключа: любой может декодировать строку и получить исходные данные. Его используют для совместимой передачи байтов через текстовые каналы, а конфиденциальность обеспечивают шифрованием и HTTPS.
Почему строка Base64 заканчивается знаком равно?
+
Base64 кодирует данные группами по 3 байта. Если в последней группе остался 1 байт, в конце добавляются два знака =, если 2 байта — один. Когда длина исходных данных кратна трём, знаков = нет вовсе.
Чем Base64URL отличается от Base64?
+
В Base64URL символы + и / заменены на - и _, чтобы результат можно было без экранирования вставлять в URL, имена файлов и cookie. Знаки = в конце в Base64URL обычно опускают. Этот вариант используется, например, в JWT-токенах.
На сколько увеличивается размер данных в Base64?
+
Примерно на 33 %: каждые 3 байта превращаются в 4 символа, а длина результата равна 4 × ⌈n / 3⌉. Файл размером 300 КБ в Base64 займёт около 400 КБ, а с переносами строк в MIME — немного больше.
Почему при декодировании Base64 появляется ошибка?
+
Частые причины: в строке есть символы вне алфавита Base64 — например, - и _ из Base64URL или кавычки, скопированные вместе со значением; строка обрезана; закодированы двоичные данные или текст не в UTF-8. Инструмент выводит результат как текст UTF-8, поэтому изображения и архивы в нём не декодируются.
Как закодировать файл или картинку в Base64?
+
Этот инструмент работает только с текстом. Для файла используйте терминал: base64 -w 0 file.png в Linux, base64 -i file.png в macOS или [Convert]::ToBase64String([IO.File]::ReadAllBytes("file.png")) в PowerShell. Для data URI добавьте к результату префикс data:image/png;base64,.
Как посмотреть содержимое JWT-токена?
+
Разделите токен по точкам и возьмите вторую часть — payload. Замените - на + и _ на /, вставьте строку в режиме Decode и получите JSON с полями токена. Помните, что содержимое JWT не зашифровано, поэтому секреты в него не кладут.