Anonymous View

Base64 Декодер

/

Ваши данные полностью конфиденциальны -- Base64 кодируется и декодируется целиком на вашем устройстве.

Обычный текст
Base64

Что такое Base64?#

Base64 — это способ представления двоичных данных в виде обычного текста с использованием 64 ASCII-символов: A–Z, a–z, 0–9, а также + и /. Он позволяет двоичным данным — изображениям, ключам и вложениям электронной почты — безопасно передаваться через системы, предназначенные для текста. Это кодирование, а не шифрование.

Base64 использует фиксированный алфавит из 64 символов. Каждое значение от 0 до 63 соответствует ровно одному из них — именно так любые 3 байта двоичных данных превращаются в 4 читаемых символа:

ЗначенияСимволы
0–25A–Z26 заглавных букв
26–51a–z26 строчных букв
52–610–910 цифр
62–63+ /2 символа

Знак «=» — единственное исключение. Это дополнение, а не одно из 64 значений; он лишь округляет последний блок.

Вы почти наверняка уже встречали его. Base64 появляется везде, где двоичные данные должны передаваться внутри текста:

  • Встраивание небольшого изображения или иконки прямо в HTML или CSS
  • Возврат двоичных данных внутри ответа JSON API
  • Кодирование вложений электронной почты (MIME)
  • Хранение ключей и сертификатов в PEM-файлах

Трюк с data-URI выглядит так. Длинная строка — это целое изображение:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

Зачем нужен Base64?#

Ранние сетевые протоколы были рассчитаны на текст, а не на необработанные байты. ASCII использовал 7 бит и 128 символов, что было достаточно для английского языка, но не для двоичных данных. Некоторые системы искажали управляющие символы или переписывали окончания строк (LF в CR + LF), незаметно повреждая изображения и аудио при передаче.

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

Как работает кодирование Base64#

Вся схема — это одна идея, повторяющаяся снова и снова: взять 3 байта (24 бита), разбить их на четыре 6-битные группы и найти каждую группу в алфавите. Вот слово «Logto», закодированное вручную.

  1. Запишите каждый символ в виде 8-битного двоичного числа, используя его ASCII-код.
  2. Берите по 3 байта за раз. Это 24 бита.
  3. Разбейте те же 24 бита на четыре группы по 6 бит.
  4. Читайте каждую 6-битную группу как число от 0 до 63.
  5. Найдите это число в алфавите, чтобы получить один символ.
  6. Если последний фрагмент байт не достигает 3, дополните оставшиеся биты нулями и добавьте «=», чтобы каждый блок оставался длиной 4 символа.

Шаг 1. Преобразуем каждый символ в 8-битное двоичное число:

СимволASCII-кодДвоичный
L7601001100
o11101101111
g10301100111
t11601110100
o11101101111

Шаг 2. Берём первые три байта, «Log», и разбиваем те же 24 бита на четыре 6-битные группы:

8-битные байты
01001100 01101111 01100111
6-битные группы
010011 000110 111101 100111

Шаг 3. Читаем каждую 6-битную группу как число, затем находим это число в алфавите:

6-битная группаЗначениеСимвол Base64
01001119T
0001106G
111101619
10011139n

«Logto» — 5 байт, не кратно 3. Последние два байта, «to», дают разбивку 6 + 6 + 4. Дополняем последние 4 бита нулями, чтобы заполнить 6-битную группу, затем добавляем один «=» для завершения 4-символьного блока:

Собираем блоки вместе:

"Logto"  →  TG9ndG8=

В каждом языке это встроено. В Node.js:

const text = 'Logto';
const base64 = Buffer.from(text).toString('base64');
console.log(base64); // TG9ndG8=

Из этого процесса вытекают три правила, которые стоит запомнить:

  • 3 на входе, 4 на выходе: Длина вывода — это длина входа, округлённая вверх до кратного 4 символа, поэтому закодированные данные всегда примерно на 33% больше.
  • «=» означает дополнение: Он появляется только тогда, когда входные данные не кратны 3 байтам.
  • Дополнение считает остаток: Нет «=» — кратно 3 байтам; один «=» — 2 лишних байта; два «=» — 1 лишний байт.

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

Обращайтесь к Base64, когда двоичные данные должны пройти через канал, поддерживающий только текст:

  • Встроенные ресурсы: Вставьте небольшое изображение или шрифт в HTML/CSS, чтобы сэкономить один запрос.
  • Только текстовые транспорты: Поместите двоичные данные внутрь JSON, XML или параметра URL-запроса.
  • Ограниченные символы: Передавайте данные через системы, которые не справляются с управляющими байтами.

Что вы получаете взамен:

  • Работает везде: Любая система с поддержкой ASCII может его прочитать без каких-либо переговоров о кодировке.
  • Ничего не повреждается: Вывод выдерживает каналы, которые иначе повредили бы необработанные байты.

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

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

  • + превращается в пробел. В строке запроса многие серверы читают + как пробел. Так ?data=ab+cd тихо приходит как «ab cd», и байты оказываются неверными.
  • / — разделитель пути. / внутри значения может быть интерпретирован как новый сегмент пути, а большинство файловых систем полностью отклоняют его в имени файла.
  • = тоже зарезервирован. Он разделяет ключи и значения в строке запроса, поэтому завершающее дополнение = обрезается или неверно читается.

Можно процентно-кодировать их (+ становится %2B, / становится %2F, = становится %3D), но это раздувает строку и легко случайно двойное кодирование.

Base64URL (RFC 4648 §5) исправляет это у источника: заменяет + на -, / на _, и убирает дополнение =. Результат можно вставлять прямо в URL, параметр запроса или имя файла без экранирования. Вы встретите его в URL, именах файлов и многих веб-API.

const base64 = 'TG9ndG8=';
const urlSafe = base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
console.log(urlSafe); // TG9ndG8

Ограничения (и одно большое заблуждение)#

Base64 — это представление, а не бесплатный обед. Помните о трёх вещах:

  • Увеличивает размер на ~33%: 3 байта превращаются в 4 символа, поэтому закодированные данные увеличиваются примерно на треть.
  • Требует ресурсов CPU: Кодирование и декодирование не бесплатны при большом объёме или больших нагрузках.
  • Нечитаемый: Непрозрачные строки усложняют журналы и отладку.
Base64 — не шифрование. Это самая распространённая ошибка. Base64 ничего не скрывает. Любой может декодировать его одной строкой кода. Если данные конфиденциальны — зашифруйте их. Base64 меняет только форму, но не то, кто может прочитать.

Часто задаваемые вопросы#

Base64 — это шифрование или безопасно ли это?

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

Почему моя строка Base64 примерно на 33% длиннее?

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

Что означают знаки «=» в конце?

Это дополнение, которое делает вывод кратным 4 символам. Один «=» означает, что во входных данных было 2 лишних байта; два «=» — 1 лишний; отсутствие «=» означает, что длина уже была кратна 3 байтам.

В чём разница между Base64 и Base64URL?

Base64URL — то же кодирование, но с алфавитом, безопасным для URL и имён файлов: - и _ заменяют + и /, а дополнение = обычно убирается. Широко используется в URL, именах файлов и многих веб-API.

Может ли Base64 кодировать любой файл или только текст?

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

Отправляет ли этот инструмент мои данные куда-либо?

Нет. Кодирование и декодирование выполняются полностью в вашем браузере. Ничего из того, что вы вставляете, не загружается и не журналируется.

Получите больше возможностей с Logto Cloud