Codificador/Decodificador Base64URL

Codifica e decodifica Base64 seguro para URL (Base64url)

Texto Simples

Base64

Roda localmente · Seguro para colar segredos
Saída em Base64...

O que é a codificação Base64url?

Base64url é uma variante da codificação Base64 projetada especificamente para uso em URLs, nomes de arquivo e outros contextos onde os caracteres padrão do Base64 + e / causam problemas. Definida na RFC 4648 Seção 5, a Base64url substitui + por - (hífen) e / por _ (sublinhado), e omite os caracteres de preenchimento = finais. O resultado é uma string que pode ser incorporada diretamente em um parâmetro de consulta de URL, um nome de arquivo ou um cabeçalho HTTP sem exigir codificação percentual adicional.

O Base64 padrão (RFC 4648 Seção 4) usa 64 caracteres: A-Z, a-z, 0-9, + e /. Os caracteres + e / são reservados em URLs: + é interpretado como espaço em strings de consulta (application/x-www-form-urlencoded) e / é um delimitador de caminho. Usar Base64 padrão dentro de uma URL exige, portanto, codificação percentual desses caracteres (%2B, %2F), o que aumenta o comprimento da string e dificulta a leitura. O Base64url elimina esse problema por completo usando caracteres seguros para URL desde o início.

O uso mais proeminente do Base64url é em JSON Web Tokens (JWT). Todos os três segmentos de um JWT — cabeçalho, payload e assinatura — são codificados em Base64url. Verificadores de código PKCE do OAuth 2.0, valores de desafio do WebAuthn e muitos esquemas de tokens de API também dependem do Base64url. Compreender essa codificação é essencial para qualquer desenvolvedor que trabalha com autenticação, autorização ou troca de dados criptográficos.

Por que usar esta ferramenta Base64url?

Converta entre Base64url e texto ou dados binários diretamente no seu navegador. Tanto a codificação quanto a decodificação são suportadas, com tratamento automático de preenchimento e substituição de caracteres. Seja para depurar um token JWT, gerar um desafio de código PKCE ou criar identificadores seguros para URL, esta ferramenta processa tudo localmente no seu navegador com zero latência e sem necessidade de requisições ao servidor.

Conversão Instantânea
O resultado é atualizado enquanto você digita. Codifique texto para Base64url ou decodifique Base64url de volta para texto sem nenhum atraso — sem envio de formulários ou recarregamentos de página.
🔗
Saída Segura para URL
A saída usa apenas caracteres seguros em URLs, nomes de arquivo e cabeçalhos HTTP: A-Z, a-z, 0-9, hífen e sublinhado. Nenhuma codificação percentual é necessária.
🔒
Processamento com Privacidade em Primeiro Lugar
Toda codificação e decodificação é executada localmente no seu navegador. Tokens JWT, segredos OAuth e chaves de API que você colar aqui nunca são transmitidos para nenhum servidor.
🏛️
Compatível com Padrões
Implementa a RFC 4648 Seção 5 exatamente: - e _ substituem + e /, e o preenchimento é omitido. Compatível com bibliotecas JWT, OAuth 2.0 PKCE e implementações WebAuthn.

Casos de Uso do Base64url

Inspeção de Tokens JWT
Decodifique segmentos individuais de JWT (cabeçalho, payload) para inspecionar afirmações, tempos de expiração e algoritmos de assinatura sem importar uma biblioteca JWT ou verificar a assinatura.
Fluxo PKCE do OAuth 2.0
Gere e verifique valores de code_verifier e code_challenge do PKCE. O método code_challenge_method S256 exige um hash SHA-256 codificado em Base64url do code_verifier.
Integração WebAuthn / FIDO2
Desafio do WebAuthn, ID de credencial e dados de atestação são transmitidos como strings Base64url entre o navegador e o servidor da parte confiante. Decodifique-os para depurar fluxos de registro e autenticação.
Geração de Tokens de API
Crie tokens seguros para URL a partir de bytes aleatórios para links de redefinição de senha, verificação de e-mail e identificadores de sessão. O Base64url produz strings compactas que funcionam em URLs sem necessidade de escape.
Pipelines DevOps e CI/CD
Armazene valores de configuração binários (certificados, chaves) como strings Base64url em variáveis de ambiente ou arquivos YAML. Ao contrário do Base64 padrão, a saída não contém caracteres que conflitem com a expansão do shell ou a sintaxe YAML.
Engenharia de Dados
Codifique identificadores binários, hashes ou checksums em Base64url para uso em nomes de arquivo, chaves de banco de dados ou colunas CSV onde os caracteres + e / quebrariam a análise ou exigiriam escape.

Base64 Padrão vs Base64url

O Base64url difere do Base64 padrão em exatamente três aspectos. O algoritmo de codificação é idêntico — apenas o alfabeto e o comportamento de preenchimento mudam:

CaracterísticaPadrão (RFC 4648 §4)Base64url (RFC 4648 §5)
Index 62+-
Index 63/_
Padding= (required)Omitted

Essas três diferenças significam que converter entre Base64 padrão e Base64url é trivial: substitua + por -, / por _, e remova os caracteres = finais. No sentido inverso, substitua - por +, _ por /, e adicione preenchimento para que o comprimento seja múltiplo de 4. A maioria das linguagens fornece suporte nativo a Base64url, tornando a conversão manual desnecessária.

Tabela de Comparação de Codificação

A tabela abaixo mostra as mesmas entradas codificadas com Base64 padrão e Base64url. Observe como os caracteres de preenchimento (=) são removidos e + / / são substituídos por - / _ na variante segura para URL:

EntradaBase64 PadrãoBase64url (sem preenchimento)
HelloSGVsbG8=SGVsbG8
AQQ==QQ
1+1=2MSsxPTI=MSsxPTI
subject?ref=1c3ViamVjdD9yZWY9MQ==c3ViamVjdD9yZWY9MQ
👍 (thumbs up)8J+RjQ==8J-RjQ

Exemplos de Código

Como codificar e decodificar strings Base64url nas linguagens mais populares. Cada exemplo produz uma saída segura para uso em URLs, nomes de arquivo e cabeçalhos HTTP:

JavaScript (browser)
// Encode to Base64url
function toBase64url(str) {
  return btoa(unescape(encodeURIComponent(str)))
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/, '')
}
toBase64url('Hello!') // → "SGVsbG8h"

// Decode from Base64url
function fromBase64url(b64url) {
  const b64 = b64url.replace(/-/g, '+').replace(/_/g, '/')
  const pad = (4 - b64.length % 4) % 4
  return decodeURIComponent(escape(atob(b64 + '='.repeat(pad))))
}
fromBase64url('SGVsbG8h') // → "Hello!"
Node.js
// Native base64url support since Node 15.7
const encoded = Buffer.from('Hello!').toString('base64url')
// → "SGVsbG8h"

const decoded = Buffer.from('SGVsbG8h', 'base64url').toString()
// → "Hello!"

// Decode a JWT payload
const jwt = 'eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0...'
const payload = JSON.parse(Buffer.from(jwt.split('.')[1], 'base64url').toString())
// → { sub: "1234567890" }
Python
import base64

# Encode to Base64url (no padding)
encoded = base64.urlsafe_b64encode(b'Hello!').rstrip(b'=').decode()
# → "SGVsbG8h"

# Decode from Base64url (re-add padding)
def b64url_decode(s: str) -> bytes:
    s += '=' * (4 - len(s) % 4)  # restore padding
    return base64.urlsafe_b64decode(s)

b64url_decode('SGVsbG8h')  # → b'Hello!'
Go
package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    // Encode to Base64url (no padding)
    encoded := base64.RawURLEncoding.EncodeToString([]byte("Hello!"))
    fmt.Println(encoded) // → "SGVsbG8h"

    // Decode from Base64url
    decoded, _ := base64.RawURLEncoding.DecodeString("SGVsbG8h")
    fmt.Println(string(decoded)) // → "Hello!"
}

Perguntas Frequentes

Qual é a diferença entre Base64 e Base64url?
O Base64url substitui + por - e / por _ do alfabeto Base64 padrão, e omite os caracteres de preenchimento = finais. Isso torna a saída segura para uso em URLs, parâmetros de consulta, nomes de arquivo e cabeçalhos HTTP sem codificação adicional. O algoritmo subjacente (divisão de bytes em grupos de 6 bits mapeados para caracteres ASCII) é idêntico. Na prática, strings Base64url podem aparecer diretamente em URLs e cabeçalhos HTTP sem modificação, enquanto strings Base64 padrão exigem codificação percentual (%2B para + e %2F para /) nesses contextos.
Por que os tokens JWT usam Base64url em vez de Base64 padrão?
Os JWTs são frequentemente transmitidos em parâmetros de consulta de URL e cabeçalhos HTTP Authorization. Os caracteres + e / do Base64 padrão precisariam ser codificados em porcentagem em URLs, aumentando o comprimento e quebrando comparações simples de strings. A especificação JWT (RFC 7519) determina o uso de Base64url sem preenchimento para garantir que os tokens sejam compactos e seguros para URL por padrão.
Como converter Base64 padrão para Base64url?
Substitua cada + por -, cada / por _, e remova todos os caracteres = finais. Em JavaScript: base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''). Em Python: base64.urlsafe_b64encode(data).rstrip(b'='). A maioria das linguagens modernas também fornece uma função dedicada de codificação Base64url. Essa conversão é frequentemente necessária ao integrar bibliotecas mais antigas que produzem Base64 padrão com sistemas modernos que esperam Base64url.
A codificação Base64url é reversível?
Sim, o Base64url é totalmente reversível. Para decodificar, substitua - por + e _ por /, adicione os caracteres de preenchimento = necessários para que o comprimento seja múltiplo de 4, e decodifique como Base64 padrão. O resultado decodificado é byte a byte idêntico à entrada original.
Posso usar o Base64url para criptografar dados?
Não. O Base64url é uma codificação, não criptografia. Ele transforma dados binários em um formato seguro para texto sem nenhum sigilo — qualquer pessoa pode decodificá-lo. Se você precisar proteger dados, criptografe-os primeiro com um algoritmo adequado (AES, ChaCha20) e depois codifique o texto cifrado em Base64url para transporte.
Por que o preenchimento é omitido no Base64url?
Os caracteres de preenchimento (=) não têm utilidade quando o decodificador pode calcular a contagem de bytes ausentes a partir do comprimento da string: (4 - comprimento % 4) % 4 fornece o preenchimento necessário. Omitir o preenchimento torna a string mais curta e evita o caractere =, que precisaria de codificação percentual em URLs. A RFC 4648 Seção 5 permite explicitamente omitir o preenchimento no Base64url.
Como lidar com strings Base64url com preenchimento no meu código?
Alguns sistemas produzem strings Base64url que mantêm o preenchimento =. A maioria dos decodificadores lida com isso corretamente. Se o seu não lidar, remova os = finais antes de decodificar. Por outro lado, se uma biblioteca exigir preenchimento, calcule e adicione-o: const padded = str + '='.repeat((4 - str.length % 4) % 4). Isso funciona porque a contagem de preenchimento é determinística a partir do comprimento da string.