Validador Base64

Cole uma string para descobrir se ela é Base64 válido. O validador identifica a variante, aponta caracteres inválidos e problemas de preenchimento e informa o que os dados contêm depois de decodificados.

Funciona inteiramente no seu navegador. Nada é enviado.

Como usar

  1. Cole no campo de entrada a string que você quer verificar.
  2. Leia o veredito: válido ou inválido, a variante detectada (padrão ou segura para URL) e o tamanho decodificado.
  3. Se houver problemas listados, use as posições informadas para encontrar caracteres inválidos, espaços em branco ou preenchimento fora do lugar.
  4. Veja o tipo de conteúdo detectado para saber se os dados são texto ou um arquivo, como PNG, PDF ou ZIP.

O que torna um Base64 válido

  • Alfabeto. Somente A-Z, a-z, 0-9 e mais dois caracteres são permitidos: + e / no Base64 padrão, - e _ no Base64URL. Uma string que mistura os dois pares geralmente foi danificada ou montada a partir de duas fontes.
  • Preenchimento. O sinal = só pode aparecer no final, no máximo duas vezes. Preenchimento no meio geralmente significa que dois valores codificados foram concatenados.
  • Comprimento. Com preenchimento, o comprimento é múltiplo de 4. Sem preenchimento, qualquer comprimento serve, exceto 4n + 1: um caractere restante guarda apenas 6 bits, o que não basta para formar um byte.

Decodificadores estritos acrescentam mais uma regra: os bits menos significativos não usados do último caractere precisam ser zero. Muitos decodificadores ignoram esses bits, mas alguns, como o base64.StdEncoding.Strict() do Go, rejeitam a string.

Erros comuns e como corrigi-los

ProblemaCausa típicaSolução
Caractere inválidoAspas, barras invertidas ou escapes %2B e %3D copiados junto com o valorRemova os caracteres extras ou decodifique a URL antes
Espaços no meio+ virou espaço quando o valor passou por uma URL ou um formulárioRecoloque o + ou use Base64URL em URLs
Comprimento de 4n + 1Valor truncado por limite de coluna, linha de log ou cópia parcialCopie o valor completo novamente
Preenchimento no meioDuas strings Base64 unidasSepare e decodifique cada parte individualmente
Quebras de linhaQuebra de linha de MIME ou PEMGeralmente inofensivas; remova-as onde for exigida uma única linha

Ser válido não significa fazer sentido

O Base64 não tem cabeçalho nem soma de verificação, então a validade só indica que uma string pode ser decodificada. Muitas palavras comuns passam no teste: quaisquer quatro letras formam um grupo válido. É por isso que o validador também decodifica os dados e informa o tamanho e o tipo de conteúdo. Texto legível ou uma assinatura de arquivo conhecida, como PNG, PDF ou ZIP, é um bom indício de que a string é mesmo Base64; um punhado de bytes aleatórios não é. Para testar também outras codificações, experimente o detector de codificação.

Como validar Base64 em código

// JavaScript: Base64 padrão com preenchimento (também corresponde a uma string vazia)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/

# Python: lança um erro em vez de ignorar caracteres inválidos
import base64, binascii
try:
    base64.b64decode(s, validate=True)
except binascii.Error:
    print('invalid')

Perguntas frequentes

Por que uma palavra comum é apontada como Base64 válido?
Porque ela é válida. Qualquer sequência de caracteres do alfabeto com um comprimento adequado é decodificada em alguns bytes; a palavra test, por exemplo, é decodificada em três bytes. Confira o tipo de conteúdo detectado: se o resultado não for nem texto legível nem um tipo de arquivo conhecido, provavelmente a entrada nunca foi Base64.
Base64 com espaços ou quebras de linha é válido?

MIME e PEM quebram o Base64 em linhas, e a maioria dos decodificadores ignora espaços em branco. Já campos JSON, cabeçalhos HTTP, JWTs e data URIs esperam uma única string contínua. O validador lista os espaços em branco separadamente para que você decida se eles importam no lugar onde a string será usada.

Base64 sem o preenchimento = é válido?
Muitas vezes, sim. O Base64URL normalmente omite o preenchimento, e a RFC 4648 permite dispensá-lo quando o comprimento é conhecido pelo contexto. Alguns decodificadores estritos ainda o exigem; se um sistema rejeitar a string, adicione sinais = até que o comprimento seja múltiplo de 4. Strings sem preenchimento com 4n + 1 caracteres nunca são válidas.
Como verificar se uma string é Base64 no JavaScript?
Para Base64 padrão estrito com preenchimento, teste a string com uma expressão regular que aceite grupos de quatro caracteres do alfabeto seguidos de preenchimento opcional. Uma verificação mais rápida é chamar atob() dentro de um try/catch. Observe que atob() lança um InvalidCharacterError para entradas inválidas, mas aceita silenciosamente espaços em branco e preenchimento ausente, e não aceita os caracteres seguros para URL.