Como usar
- Escolha Codificar ou Decodificar. A variante segura para URL já vem selecionada, com o preenchimento desativado.
- Digite ou cole o texto, insira bytes em hex ou abra um arquivo. O resultado é atualizado enquanto você digita.
- Ative o Preenchimento somente se o sistema de destino exigir sinais = no final.
- 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ão | Base64URL | |
|---|---|---|
| Valor 62 | + | - |
| Valor 63 | / | _ |
| Preenchimento | =, obrigatório | geralmente 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,xey, 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
| Alfabeto | A-Z a-z 0-9 - _ |
|---|---|
| Tamanho da saída | 4 caracteres a cada 3 bytes (cerca de 133%) |
| Preenchimento | Opcional, geralmente omitido |
| Padrão | RFC 4648, seção 5 |
| Diferencia maiúsculas e minúsculas | Sim |
Exemplos
| Entrada (UTF-8) | Saída |
|---|---|
Hello, World! | SGVsbG8sIFdvcmxkIQ |
Base64.is | QmFzZTY0Lmlz |
你好 | 5L2g5aW9 |
Perguntas frequentes
Base64URL é o mesmo que aplicar codificação de URL a uma string Base64?
+, / 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?
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?
- 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?
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.