Валидатор Base64

Вставьте строку, чтобы узнать, является ли она корректным Base64. Валидатор определяет вариант, указывает на недопустимые символы и проблемы с дополнением и сообщает, во что декодируются данные.

Работает полностью в браузере. Данные никуда не загружаются.

Как пользоваться

  1. Вставьте проверяемую строку в поле ввода.
  2. Посмотрите на вердикт («Корректный Base64» или «Некорректный Base64»), обнаруженный вариант (стандартный или безопасный для URL) и размер после декодирования.
  3. Если в разделе «Проблемы» что-то указано, найдите по приведённым позициям недопустимые символы, пробельные символы или дополнение не на своём месте.
  4. Посмотрите на поле «Содержимое», чтобы понять, текст это или файл, например PNG, PDF или ZIP.

Когда строка Base64 корректна

  • Алфавит. Допускаются только A-Z, a-z, 0-9 и ещё два символа: + и / в стандартном Base64, - и _ в Base64URL. Строка, в которой встречаются обе пары, обычно повреждена или собрана из двух источников.
  • Дополнение. Знак = может стоять только в конце и не более двух раз. Дополнение в середине обычно означает, что были склеены два закодированных значения.
  • Длина. С дополнением длина кратна 4. Без дополнения допустима любая длина, кроме 4n + 1: один оставшийся символ содержит только 6 бит, а этого недостаточно для байта.

Строгие декодеры добавляют ещё одно правило: неиспользуемые младшие биты последнего символа должны быть нулевыми. Многие декодеры эти биты игнорируют, но некоторые, например base64.StdEncoding.Strict() в Go, отклоняют такую строку.

Типичные ошибки и способы их исправления

ПроблемаТипичная причинаРешение
Недопустимый символКавычки, обратная косая черта или escape-последовательности %2B и %3D, скопированные вместе со значениемУдалите лишние символы или сначала выполните URL-декодирование
Пробелы в серединеСимволы + превратились в пробелы, когда значение прошло через URL или формуВерните + на место или используйте Base64URL для URL
Длина 4n + 1Значение обрезано из-за ограничения ширины столбца, длины строки журнала или неполного копированияСкопируйте значение целиком ещё раз
Дополнение в серединеСклеены две строки Base64Разделите их и декодируйте каждую часть отдельно
Переносы строкПеренос строк MIME или PEMОбычно безвредны; удалите их там, где требуется одна строка

Корректный не значит осмысленный

В Base64 нет ни заголовка, ни контрольной суммы, поэтому корректность означает лишь то, что строку можно декодировать. Проверку проходят многие обычные английские слова: любые четыре латинские буквы образуют допустимую группу. Именно поэтому валидатор ещё и декодирует данные и сообщает их размер и тип содержимого. Читаемый текст или известная сигнатура файла, например PNG, PDF или ZIP, — хорошее свидетельство того, что строка действительно в Base64, а горстка случайных байтов — нет. Чтобы проверить и другие кодировки, попробуйте определитель кодировки.

Проверка Base64 в коде

// JavaScript: стандартный Base64 с дополнением (совпадает и с пустой строкой)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/

# Python: выбрасывать ошибку вместо пропуска недопустимых символов
import base64, binascii
try:
    base64.b64decode(s, validate=True)
except binascii.Error:
    print('invalid')

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

Почему обычное слово считается корректным Base64?
Потому что оно действительно корректно. Любая последовательность символов алфавита подходящей длины декодируется в какие-то байты; например, слово test декодируется в три байта. Посмотрите на определённый тип содержимого: если результат не является ни читаемым текстом, ни файлом известного типа, входные данные, скорее всего, никогда не были Base64.
Корректен ли Base64 с пробелами или переносами строк?

MIME и PEM разбивают Base64 на строки, и большинство декодеров пропускают пробельные символы. Однако поля JSON, заголовки HTTP, JWT и data URI ожидают одну непрерывную строку. Валидатор показывает пробельные символы отдельно, чтобы вы могли решить, важны ли они там, где будет использоваться строка.

Корректен ли Base64 без дополнения =?
Часто да. В Base64URL дополнение обычно опускают, и RFC 4648 разрешает его отбрасывать, если длина известна из контекста. Некоторые строгие декодеры всё же требуют его: если система отклоняет строку, добавляйте знаки =, пока длина не станет кратной 4. Строки без дополнения длиной 4n + 1 символов никогда не бывают корректными.
Как проверить в JavaScript, является ли строка Base64?
Для строгого Base64 с дополнением проверьте строку регулярным выражением, которое допускает группы из четырёх символов алфавита и необязательное дополнение в конце. Более быстрый способ — вызвать atob() внутри try/catch. Учтите, что atob() выбрасывает InvalidCharacterError при некорректном вводе, но молча принимает пробельные символы и отсутствие дополнения, а символы URL-безопасного варианта не принимает.