Codificador e decodificador Base64URL

Converta texto, bytes em hex ou arquivos para Base64 seguro para URL e vice-versa. O alfabeto usa - e _ em vez de + e /, e o preenchimento vem desativado por padrão, como em JSON Web Tokens e no OAuth PKCE.

Funciona inteiramente no seu navegador. Nada é enviado.

Como usar

  1. Escolha Codificar ou Decodificar. A variante segura para URL já vem selecionada, com o preenchimento desativado.
  2. Digite ou cole o texto, insira bytes em hex ou abra um arquivo. O resultado é atualizado enquanto você digita.
  3. Ative o Preenchimento somente se o sistema de destino exigir sinais = no final.
  4. Copie o resultado ou baixe-o.

O que é Base64URL?

O Base64URL é definido na seção 5 da RFC 4648 como "Base 64 Encoding with URL and Filename Safe Alphabet", ou seja, codificação Base64 com alfabeto seguro para URLs e nomes de arquivo. Ele funciona exatamente como o Base64 padrão, com 6 bits por caractere, mas troca os dois caracteres que causam problemas em URLs e caminhos de arquivo:

Base64 padrãoBase64URL
Valor 62+-
Valor 63/_
Preenchimento=, obrigatóriogeralmente omitido

Em uma URL, + pode ser lido como espaço, / separa segmentos do caminho e = separa chaves de valores na query string, por isso o Base64 padrão precisa passar por codificação percentual antes de entrar em um link. O Base64URL não precisa de escape. A RFC 4648 permite omitir o preenchimento quando o comprimento é conhecido pelo contexto, e a maioria das especificações baseadas em Base64URL faz exatamente isso.

Onde o Base64URL é usado

  • JSON Web Tokens. O cabeçalho, o payload e a assinatura de um JWT são, cada um, Base64URL sem preenchimento (RFC 7515). Leia um token com o Decodificador JWT.
  • OAuth 2.0 PKCE. O code_challenge é a forma Base64URL sem preenchimento do hash SHA-256 do code verifier (RFC 7636), por isso ele sempre tem 43 caracteres.
  • JSON Web Keys e WebAuthn. Parâmetros de chave como n, e, x e y, assim como os desafios e os IDs de credencial do WebAuthn, são trocados em Base64URL.
  • Tokens, IDs e nomes de arquivo. Links de redefinição de senha, URLs assinadas e chaves de cache carregam Base64URL sem escape; um ID aleatório de 16 bytes vira 22 caracteres. Em sistemas de arquivos que não diferenciam maiúsculas de minúsculas, prefira o Base32, porque o Base64URL depende da caixa das letras.

Conversão entre Base64 e Base64URL

As duas variantes codificam os mesmos bytes, então a conversão é só uma troca de caracteres: substitua + por - e / por _ e depois remova os = do final. Para voltar, troque os caracteres novamente e adicione = até que o comprimento seja múltiplo de 4. O decodificador desta página aceita os dois alfabetos, com ou sem preenchimento.

// Node.js 16+
Buffer.from(data).toString('base64url')
Buffer.from(str, 'base64url')

# Python (urlsafe_b64encode mantém o preenchimento)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

// Java
Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)

Especificação

AlfabetoA-Z a-z 0-9 - _
Tamanho da saída4 caracteres a cada 3 bytes (cerca de 133%)
PreenchimentoOpcional, geralmente omitido
PadrãoRFC 4648, seção 5
Diferencia maiúsculas e minúsculasSim

Exemplos

Entrada (UTF-8)Saída
Hello, World!SGVsbG8sIFdvcmxkIQ
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

Perguntas frequentes

Base64URL é o mesmo que aplicar codificação de URL a uma string Base64?
Não. A codificação percentual do Base64 padrão transforma +, / e = em %2B, %2F e %3D, o que deixa a string mais longa. O Base64URL usa um alfabeto diferente, então nenhum escape é necessário. As duas formas não são intercambiáveis sem conversão.
O Base64URL deve ter preenchimento?
Depende de quem vai consumir o valor. JWT, JSON Web Keys e PKCE exigem que o preenchimento seja omitido, enquanto o urlsafe_b64encode do Python e o codificador de URL padrão do Java o adicionam. Na dúvida, omita; este decodificador aceita as duas formas.
Por que um decodificador Base64 padrão rejeita minha string Base64URL?
Decodificadores padrão estritos não aceitam - e _, e alguns exigem preenchimento. Troque os caracteres e adicione sinais = para que o comprimento seja múltiplo de 4, ou decodifique a string aqui.
Como verificar um code challenge do PKCE?
O challenge é BASE64URL(SHA256(code_verifier)) sem preenchimento. Decodifique-o aqui com a saída em Hex: um valor correto resulta em exatamente 32 bytes, que você pode comparar com o hash SHA-256 do verifier.