Decodex

DECODEX · BASE64 · UTF-8

Заполнение Base64: зачем нужны = и ==?

Как работает заполнение Base64 и почему строки Zg, Zg= и Zg== обрабатываются по-разному.

Base64 превращает группы из трёх байтов в четыре символа. Знак = заполняет последнюю группу, если байтов не хватает. Он не представляет букву исходного текста.

Считайте байты

Один оставшийся байт требует ==, два — =, три не требуют заполнения. f превращается в Zg==, fo в Zm8=, foo в Zm9v. Считайте байты UTF-8: русская буква или эмодзи могут занимать несколько байтов.

Восстановление пропущенного заполнения

После удаления пробельных символов остаток длины при делении на 4, равный 2, допускает добавление ==, а 3 — добавление =. Остаток 1 невозможен для полных данных Base64: дополнительные = не исправят его. Проверьте также алфавит и протокол.

Пропущенное и ошибочное заполнение

Decodex принимает Zg и Zg==, но отклоняет Zg= из-за неполного присутствующего заполнения. A=AA и Zg=== тоже отклоняются. Не удаляйте произвольные символы, скрывая повреждение данных. Одни протоколы требуют точного заполнения, другие его опускают.

Проверить пример

ТекстUTF-8 bytesBase64Заполнение
f1Zg====
fo2Zm8==
foo3Zm9v—

Проверить пример →

Base64 → UTF-8 · UTF-8 → Base64

Частые вопросы

Строка без = всегда неправильная?

Нет. Если число байтов кратно трём, заполнение не нужно. Некоторые протоколы также специально его опускают.

Источники

Другие руководства Base64