Что такое декодер Base64?
Base64 — это способ кодирования, при котором двоичные данные представляются с помощью 64 печатных ASCII-символов (A–Z, a–z, 0–9, а также + и /). Его широко применяют для встраивания изображений прямо в HTML, передачи данных в JSON и URL, а также для кодирования вложений электронной почты. Этот декодер выполняет обратную операцию: превращает строку Base64 в исходный обычный текст, который в ней зашифрован.
Как пользоваться
Вставьте или введите строку Base64 в поле ввода и нажмите «Отправить». Инструмент удалит все пробелы, декодирует символы и покажет полученный текст, а вместе с ним — количество декодированных байтов, число входных символов и сколько символов заполнения ('=') присутствовало в строке. Если во вводе встретятся символы, не входящие в алфавит Base64, вы увидите сообщение о том, что строка некорректна.
Как устроена формула
Каждый символ Base64 кодирует 6 бит данных. Значит, четыре символа Base64 несут \(4 \times 6 = 24\) бита, которые аккуратно складываются в три байта по 8 бит. Когда длина исходных данных не кратна 3, в конец добавляют один или два символа заполнения '=', чтобы длина закодированной строки всегда была кратна 4. При декодировании заполнение отбрасывается, а лишние биты не используются.
$$\text{Bytes} = \left\lfloor \frac{6 \times \text{Base64 chars (no padding)}}{8} \right\rfloor$$$$\begin{gathered} \text{Bytes} = \left\lfloor \frac{6N}{8} \right\rfloor \\[1.5em] \text{where}\quad \left\{ \begin{aligned} N &= \text{valid chars of } \text{Base64 Input} \\ &\quad \text{(whitespace and } = \text{ removed)} \\ \text{char} &\to 6\text{ bits},\; 8\text{ bits} \to 1\text{ byte} \end{aligned} \right. \end{gathered}$$
Разбор на примере
Возьмём строку Base64 SGk=. Символам соответствуют значения S=18, G=6, k=36, а '=' — это заполнение. В двоичном виде: \(010010\ 000110\ 100100\) → 24 бита, но из-за завершающего заполнения корректными остаются только 2 байта: \(01001000\) (72 = 'H') и \(01101001\) (105 = 'i'). Результат — Hi.
Частые вопросы
Передаются ли мои данные куда-либо? Логика декодирования выполняется на стороне сервера, чтобы показать результат, но никакие введённые данные не сохраняются. Не вставляйте сюда конфиденциальную информацию.
Почему количество байтов не делится на 4? Количество байтов относится к декодированным выходным данным, а не к входным символам. Каждые 4 входных символа превращаются максимум в 3 выходных байта.
Что означает заполнение? Один знак '=' указывает, что последняя группа дала 2 байта; два знака '=' — что она дала 1 байт. Отсутствие заполнения означает, что длина данных и так была кратна 3.
Справочник по алфавиту Base64
Standard Base64 (RFC 4648) отображает каждое 6-битное значение (0–63) в один из 64 печатных символов ASCII. Декодер читает каждый символ, ищет его 6-битный индекс в этой таблице, объединяет биты и перегруппирует их в 8-битные байты. В таблице ниже приведён полный алфавит и индекс, присвоенный каждому символу.
| Индекс | Символ | Индекс | Символ | Индекс | Символ | Индекс | Символ |
|---|---|---|---|---|---|---|---|
| 0 | A | 16 | Q | 32 | g | 48 | w |
| 1 | B | 17 | R | 33 | h | 49 | x |
| 2 | C | 18 | S | 34 | i | 50 | y |
| 3 | D | 19 | T | 35 | j | 51 | z |
| 4 | E | 20 | U | 36 | k | 52 | 0 |
| 5 | F | 21 | V | 37 | l | 53 | 1 |
| 6 | G | 22 | W | 38 | m | 54 | 2 |
| 7 | H | 23 | X | 39 | n | 55 | 3 |
| 8 | I | 24 | Y | 40 | o | 56 | 4 |
| 9 | J | 25 | Z | 41 | p | 57 | 5 |
| 10 | K | 26 | a | 42 | q | 58 | 6 |
| 11 | L | 27 | b | 43 | r | 59 | 7 |
| 12 | M | 28 | c | 44 | s | 60 | 8 |
| 13 | N | 29 | d | 45 | t | 61 | 9 |
| 14 | O | 30 | e | 46 | u | 62 | + |
| 15 | P | 31 | f | 47 | v | 63 | / |
65-й символ, = (равно), не является символом данных. Это дополняющий маркер, используемый в конце закодированной строки, чтобы общая длина была кратна 4 символам. Один = означает, что финальная группа из 4 символов кодирует 2 байта; два == означают, что она кодирует 1 байт. Декодер отбрасывает дополнение и дополнительные нулевые биты, которые оно предполагает.
Дополнительные примеры декодирования
Каждый символ Base64 вносит 6 битов. Четыре символа (24 бита) декодируются ровно в 3 байта; неполные группы используют дополнение, чтобы декодер знал, сколько байтов сохранить. Количество байтов следует формуле \(\text{Байты} = \left\lfloor \frac{6 \times n}{8} \right\rfloor\), где \(n\) — количество реальных (недополняющих) символов.
Пример 1 — Без дополнения: "TWFu" → "Man"
- Индексы: T=19, W=22, F=5, u=46.
- 6-битные группы:
010011 010110 000101 101110. - Перегруппировка в байты:
01001101 01100001 01101110= 77, 97, 110. - ASCII 77, 97, 110 = M, a, n. При \(n=4\): \(\lfloor 24/8 \rfloor = 3\) байта — Man.
Пример 2 — Одно дополнение '=': "SGVsbG8=" → "Hello"
- Отбросить дополнение: 7 реальных символов S,G,V,s,b,G,8.
- Индексы: S=18, G=6, V=21, s=44, b=27, G=6, 8=60.
- Биты:
010010 000110 010101 101100 011011 000110 111100(последние 2 бита из дополняющей группы — нулевое заполнение и отбрасываются). - Байты:
01001000 01100101 01101100 01101100 01101111= 72, 101, 108, 108, 111 = H, e, l, l, o. - При \(n=7\): \(\lfloor 42/8 \rfloor = 5\) байтов — Hello.
Пример 3 — Два дополнения '==': "aGk="... и "TQ==" → "M"
- Отбросить дополнение: 2 реальных символа T, Q.
- Индексы: T=19, Q=16.
- Биты:
010011 010000; сохранить только первые 8 битов, остальные 4 — нулевое заполнение. - Байт:
01001101= 77 = M. - При \(n=2\): \(\lfloor 12/8 \rfloor = 1\) байт — M.
Чтобы сделать обратное и произвести эти строки из текста, используйте Кодировщик Base64.
Ключевые термины
- Алфавит Base64
- Фиксированный набор из 64 печатных символов (A–Z, a–z, 0–9, + и /), используемых для представления бинарных данных как текста. Каждый символ представляет 6-битное значение от 0 до 63.
- Дополнение ('=')
- Знак равенства, добавленный в конец закодированной строки, чтобы её длина была кратна 4 символам. Он не несёт данные; один '=' отмечает финальную группу из 2 байтов, а '==' — финальную группу из 1 байта.
- Секстет (6 битов)
- Группа из 6 битов — единица, которую кодирует один символ Base64. Четыре секстета (24 бита) ровно совпадают с тремя октетами.
- Октет / байт (8 битов)
- 8-битная единица, стандартный размер одного байта декодированных данных. Декодирование Base64 перегруппирует секстеты обратно в октеты, что может также продемонстрировать конвертер двоичного в текст бит за битом.
- Удаление пробелов
- Удаление пробелов, табуляций и разрывов строк перед декодированием. Многие системы вставляют разрывы строк в длинный Base64 (например, сертификаты PEM, электронная почта MIME); надёжный декодер игнорирует этот пробел вместо того, чтобы обрабатывать его как данные.
- URL-безопасный Base64
- Вариант (RFC 4648 §5), который заменяет + на - и / на _, чтобы строка была безопасна в URL и именах файлов. Дополнение часто также опускается. Преобразуйте такие символы обратно в + и / перед использованием стандартного декодера; для самого окружающего URL см. Калькулятор кодирования/декодирования URL.