Base64url es una variante de la codificación Base64 diseñada específicamente para su uso en URLs, nombres de archivo y otros contextos donde los caracteres estándar de Base64 + y / causan problemas. Definida en la Sección 5 de RFC 4648, Base64url reemplaza + por - (guion) y / por _ (guion bajo), y omite los caracteres de relleno = al final. El resultado es una cadena que puede incrustarse directamente en un parámetro de consulta de URL, un nombre de archivo o un encabezado HTTP sin necesitar codificación de porcentaje adicional.
El Base64 estándar (Sección 4 de RFC 4648) utiliza 64 caracteres: A-Z, a-z, 0-9, + y /. Los caracteres + y / están reservados en las URLs: + se interpreta como un espacio en cadenas de consulta (application/x-www-form-urlencoded) y / es un delimitador de ruta. Usar Base64 estándar dentro de una URL requiere por tanto codificar esos caracteres con porcentaje (%2B, %2F), lo que aumenta la longitud de la cadena y dificulta su lectura. Base64url elimina este problema por completo al utilizar desde el principio caracteres seguros para URLs.
El uso más destacado de Base64url es en los JSON Web Tokens (JWT). Los tres segmentos de un JWT — encabezado, carga útil y firma — están codificados en Base64url. Los verificadores de código PKCE de OAuth 2.0, los valores de desafío de WebAuthn y muchos esquemas de tokens de API también dependen de Base64url. Comprender esta codificación es esencial para cualquier desarrollador que trabaje con autenticación, autorización o intercambio de datos criptográficos.
¿Por qué usar esta herramienta Base64url?
Convierte entre Base64url y texto o datos binarios directamente en tu navegador. Se admiten tanto la codificación como la decodificación, con manejo automático del relleno y la sustitución de caracteres. Ya sea que estés depurando un token JWT, generando un code challenge para PKCE, o construyendo identificadores seguros para URLs, esta herramienta procesa todo localmente en tu navegador con latencia cero y sin dependencias externas.
⚡
Conversión instantánea
El resultado se actualiza mientras escribes. Codifica texto a Base64url o decodifica Base64url de vuelta a texto sin ningún retraso — sin envíos de formularios ni recargas de página.
🔗
Resultado seguro para URLs
El resultado usa únicamente caracteres seguros en URLs, nombres de archivo y encabezados HTTP: A-Z, a-z, 0-9, guion y guion bajo. No se necesita codificación de porcentaje.
🔒
Procesamiento con privacidad primero
Toda la codificación y decodificación se ejecuta localmente en tu navegador. Los tokens JWT, secretos OAuth y claves de API que pegues aquí nunca se transmiten a ningún servidor.
🏛️
Conforme a estándares
Implementa exactamente la Sección 5 de RFC 4648: - y _ sustituyen a + y /, y se omite el relleno. Compatible con bibliotecas JWT, OAuth 2.0 PKCE e implementaciones WebAuthn.
Casos de uso de Base64url
Inspección de tokens JWT
Decodifica segmentos individuales de JWT (encabezado, carga útil) para inspeccionar reclamaciones, tiempos de expiración y algoritmos de firma sin importar una biblioteca JWT ni verificar la firma.
Flujo PKCE de OAuth 2.0
Genera y verifica los valores de code_verifier y code_challenge para PKCE. El método code_challenge_method S256 requiere un hash SHA-256 del code_verifier codificado en Base64url.
Integración WebAuthn / FIDO2
El desafío de WebAuthn, el ID de credencial y los datos de attestation se transmiten como cadenas Base64url entre el navegador y el servidor de la parte que confía. Decodifícalos para depurar los flujos de registro y autenticación.
Generación de tokens de API
Crea tokens seguros para URLs a partir de bytes aleatorios para enlaces de restablecimiento de contraseña, verificación de correo e identificadores de sesión. Base64url produce cadenas compactas que funcionan en URLs sin necesidad de escape.
Pipelines de DevOps y CI/CD
Almacena valores de configuración binarios (certificados, claves) como cadenas Base64url en variables de entorno o archivos YAML. A diferencia del Base64 estándar, el resultado no contiene caracteres que entren en conflicto con la expansión de shell o la sintaxis YAML.
Ingeniería de datos
Codifica identificadores binarios, hashes o sumas de verificación como Base64url para usarlos en nombres de archivo, claves de base de datos o columnas CSV donde los caracteres + y / romperían el análisis o requerirían escape.
Base64 estándar vs Base64url
Base64url difiere del Base64 estándar en exactamente tres aspectos. El algoritmo de codificación es idéntico — solo cambian el alfabeto y el comportamiento del relleno:
Característica
Estándar (RFC 4648 §4)
Base64url (RFC 4648 §5)
Index 62
+
-
Index 63
/
_
Padding
= (required)
Omitted
Estas tres diferencias significan que convertir entre Base64 estándar y Base64url es trivial: reemplaza + por -, / por _, y elimina los caracteres = finales. A la inversa, reemplaza - por +, _ por /, y vuelve a añadir el relleno para que la longitud sea múltiplo de 4. La mayoría de lenguajes ofrecen soporte nativo para Base64url, lo que hace innecesaria la conversión manual.
Tabla comparativa de codificación
La siguiente tabla muestra las mismas entradas codificadas con Base64 estándar y Base64url. Observa cómo los caracteres de relleno (=) se eliminan y + / / se reemplazan por - / _ en la variante segura para URL:
Entrada
Base64 estándar
Base64url (sin relleno)
Hello
SGVsbG8=
SGVsbG8
A
QQ==
QQ
1+1=2
MSsxPTI=
MSsxPTI
subject?ref=1
c3ViamVjdD9yZWY9MQ==
c3ViamVjdD9yZWY9MQ
ð (thumbs up)
8J+RjQ==
8J-RjQ
Ejemplos de código
Cómo codificar y decodificar cadenas Base64url en los lenguajes más populares. Todos los ejemplos producen resultados seguros para su uso en URLs, nombres de archivo y encabezados HTTP:
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!"
}
Preguntas frecuentes
¿Cuál es la diferencia entre Base64 y Base64url?
Base64url reemplaza + por - y / por _ del alfabeto Base64 estándar, y omite los caracteres de relleno = al final. Esto hace que el resultado sea seguro para su uso en URLs, parámetros de consulta, nombres de archivo y encabezados HTTP sin codificación adicional. El algoritmo subyacente (dividir bytes en grupos de 6 bits mapeados a caracteres ASCII) es idéntico.
¿Por qué los tokens JWT usan Base64url en lugar de Base64 estándar?
Los JWT se transmiten frecuentemente en parámetros de consulta de URL y encabezados HTTP Authorization. Los caracteres + y / del Base64 estándar necesitarían codificarse con porcentaje en las URLs, aumentando la longitud y rompiendo comparaciones simples de cadenas. La especificación JWT (RFC 7519) exige Base64url sin relleno para garantizar que los tokens sean compactos y seguros para URLs de forma predeterminada.
¿Cómo convierto Base64 estándar a Base64url?
Reemplaza cada + por -, cada / por _, y elimina todos los caracteres = finales. En JavaScript: base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''). En Python: base64.urlsafe_b64encode(data).rstrip(b'='). La mayoría de los lenguajes modernos también ofrecen una función dedicada de codificación Base64url. Esta conversión suele ser necesaria al integrar bibliotecas antiguas que producen Base64 estándar con sistemas modernos que esperan Base64url.
¿Es reversible la codificación Base64url?
Sí, Base64url es totalmente reversible. Para decodificar, reemplaza - por + y _ por /, añade los caracteres de relleno = necesarios para que la longitud sea múltiplo de 4, y luego decodifica como Base64 estándar. El resultado decodificado es idéntico byte a byte a la entrada original.
¿Puedo usar Base64url para cifrar datos?
No. Base64url es una codificación, no un cifrado. Transforma datos binarios en un formato seguro para texto sin ningún secreto — cualquiera puede decodificarlo. Si necesitas proteger datos, cígralos primero con un algoritmo adecuado (AES, ChaCha20) y luego codifica el texto cifrado en Base64url para su transporte.
¿Por qué se omite el relleno en Base64url?
Los caracteres de relleno (=) no cumplen ninguna función cuando el decodificador puede calcular el número de bytes faltantes a partir de la longitud de la cadena: (4 - longitud % 4) % 4 da el relleno necesario. Omitir el relleno hace la cadena más corta y evita los caracteres =, que necesitarían codificarse con porcentaje en las URLs. La Sección 5 de RFC 4648 permite explícitamente omitir el relleno en Base64url.
¿Cómo gestiono cadenas Base64url con relleno en mi código?
Algunos sistemas producen cadenas Base64url que conservan el relleno =. La mayoría de decodificadores lo gestionan correctamente. Si el tuyo no lo hace, elimina los = finales antes de decodificar. A la inversa, si una biblioteca requiere relleno, calcula y añádelo: const padded = str + '='.repeat((4 - str.length % 4) % 4). Esto funciona porque el número de caracteres de relleno es determinista a partir de la longitud de la cadena.