Ferramentas

Codificar / decodificar Base64

Codificação

Codificação e decodificação Base64 segura para UTF-8, com variante URL-safe opcional.

100% no cliente Sem backend
Entrada
Saída
Nesta página

O que é Base64?#

Base64 é uma forma de escrever bytes arbitrários usando apenas 64 caracteres ASCII imprimíveis (A-Z, a-z, 0-9, +, /, com = para preenchimento). Existe porque grande parte do mundo da computação foi desenhada para texto — corpos de e-mail, campos JSON, cabeçalhos HTTP, prefixos data-URI — e engasga-se com bytes em bruto, especialmente bytes com o bit mais significativo ativado ou códigos de controlo embutidos. Base64 é a língua franca a que se recorre quando se precisa que dados com forma binária sobrevivam a um canal só de texto.

Cada três bytes de entrada (24 bits) tornam-se quatro caracteres base64 (cada um codificando 6 bits). É por isso que a saída base64 é sempre um múltiplo de quatro caracteres de comprimento, e por que é cerca de 33% maior que os bytes originais — a redundância é o preço da imprimibilidade. Quando o comprimento da entrada não é múltiplo de três, aparecem um ou dois caracteres de preenchimento = no fim.

Esta página codifica e decodifica base64 de forma segura com UTF-8. Uma armadilha em que as pessoas caem constantemente: passar uma string diretamente a btoa() lança InvalidCharacterError no momento em que contém um carácter não-ASCII (é, 中文, um emoji). A correção é codificar o texto para bytes UTF-8 primeiro, depois base64 — que é exatamente o que esta ferramenta faz, pelo que café faz a viagem completa corretamente em vez de lançar um erro.

Como usar#

  1. Escolha a direção com o interruptor Codificar / Decodificar no canto superior esquerdo da barra de ferramentas.
  2. Escreva ou cole no painel Entrada à esquerda.
    • No modo Codificar a entrada é tratada como texto UTF-8.
    • No modo Decodificar a entrada deve ser uma string base64. Espaços em branco são tolerados.
  3. Marque URL-safe se precisar do alfabeto base64url (- e _ em vez de + e /, preenchimento removido). É o que os JWTs e muitos esquemas de URL assinada esperam.
  4. O resultado aparece em tempo real no painel Saída à direita. Clique em Copiar para o recolher.
  5. Use Exemplo para inserir um par de demonstração, e Limpar para repor ambos os painéis.

Principais funcionalidades#

  • Seguro para UTF-8 em ambas as direções. A codificação passa o texto primeiro por TextEncoder, pelo que caracteres multibyte nunca rebentam; a decodificação passa os bytes por TextDecoder para que o texto original seja restaurado exatamente.
  • Alfabetos padrão e URL-safe. Uma caixa de verificação alterna entre base64 clássico (+/=) e base64url (-_ sem preenchimento), com reenchimento correto na decodificação.
  • Puramente no lado do cliente. A conversão corre apenas no seu navegador — não há backend nem pedido de rede. Colar um token sensível aqui não o envia para lado nenhum.
  • Linha de estado em tempo real. A barra por baixo dos painéis reporta erros de codificação/decodificação (por exemplo, uma entrada truncada ou com %) em vez de produzir silenciosamente lixo.

Exemplo prático#

Com Codificar e modo padrão (não URL-safe), o texto ASCII Hello, World! torna-se:

SGVsbG8sIFdvcmxkIQ==

Os dois = no fim mostram que a entrada de 13 bytes não era múltiplo de três — esperado, não um erro.

A manipulação de UTF-8 importa assim que se sai do ASCII. Codificar café (onde é são dois bytes UTF-8, c3 a9) dá:

Y2Fmw6k=

Se tivesse chamado btoa("café") diretamente numa consola, teria lançado um erro. Esta ferramenta não o faz, porque codifica os bytes UTF-8 primeiro.

O modo URL-safe reescreve o alfabeto para que a saída nunca transporte caracteres que uma URL interpretaria mal: + torna-se -, / torna-se _, e o preenchimento = final é removido (readicionado automaticamente na decodificação). Pegue na saída padrão de cima, SGVsbG8sIFdvcmxkIQ== — em modo URL-safe os dois = de preenchimento são removidos, dando SGVsbG8sIFdvcmxkIQ. A troca +//-/_ só altera alguma coisa quando esses caracteres aparecem efetivamente na saída, o que tende a acontecer com payloads binários como resumos de hash ou tokens aleatórios — precisamente o tipo de dados que se insere num caminho de URL ou parâmetro de consulta sem mais escape.

FAQ#

O meu texto decodificado aparece como mojibake. O que aconteceu?#

Quase sempre, o base64 que decodificou era a codificação de bytes noutro conjunto de caracteres (muitas vezes Latin-1 ou Windows-1252), não UTF-8. Esta ferramenta decodifica os bytes como UTF-8, pelo que um é codificado em Latin-1 (0xe9, um byte solitário) não é UTF-8 válido e aparece mal. Descubra como a outra ponta codificou o texto original, ou recodifique-o como UTF-8 primeiro.

Base64 padrão ou base64url — qual quero?#

O padrão (+/=) é a predefinição para tudo o que não vai para uma URL: anexos de e-mail, URIs data:, campos JSON com binário. Ative URL-safe quando a saída vai ficar num caminho de URL, string de consulta, ou num segmento de JWT, onde +, / e = ou partem a análise ou são corrompidos pelo transporte. A decodificação de qualquer das formas é aceite automaticamente.

Porque é que a saída codificada é mais longa que a minha entrada?#

Isso é inerente, não um bug. Base64 empacota 6 bits por carácter em vez de 8, pelo que a saída é cerca de 4/3 do tamanho da entrada — aproximadamente 33% de overhead. Para entradas muito pequenas pode parecer ainda maior em relação ao original, porque a estrutura fixa domina.

Isto consegue decifrar ou partir uma string base64?#

Não — base64 é uma codificação, não encriptação. É totalmente reversível por desenho e não transporta nenhuma chave. Qualquer pessoa com a string a pode decodificar. Se mesmo assim precisa de sigilo, encripte primeiro (por exemplo com um esquema de encriptação autenticada) e depois codifique o texto cifral em base64 para transporte.