Как пользоваться
- Вставьте проверяемую строку в поле ввода.
- Посмотрите на вердикт («Корректный Base64» или «Некорректный Base64»), обнаруженный вариант (стандартный или безопасный для URL) и размер после декодирования.
- Если в разделе «Проблемы» что-то указано, найдите по приведённым позициям недопустимые символы, пробельные символы или дополнение не на своём месте.
- Посмотрите на поле «Содержимое», чтобы понять, текст это или файл, например 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 без дополнения =?
=, пока длина не станет кратной 4. Строки без дополнения длиной 4n + 1 символов никогда не бывают корректными.Как проверить в JavaScript, является ли строка Base64?
atob() внутри try/catch. Учтите, что atob() выбрасывает InvalidCharacterError при некорректном вводе, но молча принимает пробельные символы и отсутствие дополнения, а символы URL-безопасного варианта не принимает.