Ваши данные полностью конфиденциальны -- Base64 кодируется и декодируется целиком на вашем устройстве.
Base64 — это способ представления двоичных данных в виде обычного текста с использованием 64 ASCII-символов: A–Z, a–z, 0–9, а также + и /. Он позволяет двоичным данным — изображениям, ключам и вложениям электронной почты — безопасно передаваться через системы, предназначенные для текста. Это кодирование, а не шифрование.
Base64 использует фиксированный алфавит из 64 символов. Каждое значение от 0 до 63 соответствует ровно одному из них — именно так любые 3 байта двоичных данных превращаются в 4 читаемых символа:
| Значения | Символы | |
|---|---|---|
| 0–25 | A–Z | 26 заглавных букв |
| 26–51 | a–z | 26 строчных букв |
| 52–61 | 0–9 | 10 цифр |
| 62–63 | + / | 2 символа |
Знак «=» — единственное исключение. Это дополнение, а не одно из 64 значений; он лишь округляет последний блок.
Вы почти наверняка уже встречали его. Base64 появляется везде, где двоичные данные должны передаваться внутри текста:
Трюк с data-URI выглядит так. Длинная строка — это целое изображение:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />Ранние сетевые протоколы были рассчитаны на текст, а не на необработанные байты. ASCII использовал 7 бит и 128 символов, что было достаточно для английского языка, но не для двоичных данных. Некоторые системы искажали управляющие символы или переписывали окончания строк (LF в CR + LF), незаметно повреждая изображения и аудио при передаче.
Base64 обходит всё это, используя только символы, с которыми согласны все системы. Base16 и Base32 решают ту же задачу с меньшими алфавитами, но Base64 упаковывает больше данных в один символ, оставаясь безопасным. Именно поэтому он победил.
Вся схема — это одна идея, повторяющаяся снова и снова: взять 3 байта (24 бита), разбить их на четыре 6-битные группы и найти каждую группу в алфавите. Вот слово «Logto», закодированное вручную.
Шаг 1. Преобразуем каждый символ в 8-битное двоичное число:
| Символ | ASCII-код | Двоичный |
|---|---|---|
| L | 76 | 01001100 |
| o | 111 | 01101111 |
| g | 103 | 01100111 |
| t | 116 | 01110100 |
| o | 111 | 01101111 |
Шаг 2. Берём первые три байта, «Log», и разбиваем те же 24 бита на четыре 6-битные группы:
Шаг 3. Читаем каждую 6-битную группу как число, затем находим это число в алфавите:
| 6-битная группа | Значение | Символ Base64 |
|---|---|---|
| 010011 | 19 | T |
| 000110 | 6 | G |
| 111101 | 61 | 9 |
| 100111 | 39 | n |
«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=Из этого процесса вытекают три правила, которые стоит запомнить:
Обращайтесь к Base64, когда двоичные данные должны пройти через канал, поддерживающий только текст:
Что вы получаете взамен:
Стандартный Base64 использует три символа, которые конфликтуют с тем, как работают URL, строки запросов и имена файлов: +, / и дополнение =. Поместите обычную строку Base64 в ссылку — и она может сломаться незаметно:
Можно процентно-кодировать их (+ становится %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); // TG9ndG8Base64 — это представление, а не бесплатный обед. Помните о трёх вещах:
Нет. Это обратимое кодирование с публичным алфавитом, поэтому любой может мгновенно декодировать его — конфиденциальности оно не добавляет. Для защиты чувствительных данных используйте шифрование.
Base64 превращает каждые 3 байта в 4 символа, поэтому закодированная форма всегда примерно на треть больше исходных байт.
Это дополнение, которое делает вывод кратным 4 символам. Один «=» означает, что во входных данных было 2 лишних байта; два «=» — 1 лишний; отсутствие «=» означает, что длина уже была кратна 3 байтам.
Base64URL — то же кодирование, но с алфавитом, безопасным для URL и имён файлов: - и _ заменяют + и /, а дополнение = обычно убирается. Широко используется в URL, именах файлов и многих веб-API.
Любые двоичные данные: изображения, PDF, ключи, исполняемые файлы. Base64 работает с необработанными байтами, поэтому исходный тип содержимого не имеет значения.
Нет. Кодирование и декодирование выполняются полностью в вашем браузере. Ничего из того, что вы вставляете, не загружается и не журналируется.