Cómo decodificar Base64URL
- Pega la cadena en Entrada · Base64. La página se abre con un ejemplo URL-safe.
- Lee el resultado en Salida · texto. La línea de estado muestra la variante (Base64URL o Standard), el número de bytes decodificados y el tipo detectado. Si faltaba el relleno, indica “Se añadió automáticamente el relleno que faltaba.”
- El JSON, el contenido habitual de los tokens, se indenta con Formatear JSON.
- Si el contenido es binario, como hashes o ID aleatorios, la herramienta indica que son datos binarios y enlaza a un decodificador adecuado.
- Usa Copiar salida o Descargar con el resultado.
Para codificar, usa el codificador Base64URL. Para convertir una cadena Base64URL a Base64 estándar sin decodificarla, usa Base64URL a Base64.
Ejemplos
| Base64URL | Decodificado | Nota |
|---|---|---|
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 | {"alg":"HS256","typ":"JWT"} | Un encabezado JWT típico |
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSIsImFkbWluIjp0cnVlfQ | {"sub":"1234567890","name":"Ada","admin":true} | Un payload JWT; relleno restaurado |
c3ViamVjdHM_X2Q | subjects?_d | _ es la / URL-safe |
8J-Riw | 👋 | - es el + URL-safe |
E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM | 32 bytes binarios | Un hash SHA-256, el ejemplo de PKCE del RFC 7636 |
Con el hash de la última fila, la salida de texto no tiene sentido. Ábrelo en Base64 a hex para ver los bytes como 13 d3 1e 96 ....
El relleno y por qué se puede restaurar
Base64URL se escribe normalmente sin =. Eso no pierde información: una cadena válida tiene una longitud de 4n, 4n + 2 o 4n + 3 caracteres, y el resto le dice al decodificador si el último grupo contiene uno o dos bytes. La herramienta añade el = que falta antes de decodificar y lo indica en la línea de estado.
Una longitud de 4n + 1 no puede darse nunca. Si ves el error “Longitud incorrecta: sobra o falta un carácter”, se perdió o se añadió un carácter al copiar el valor, por ejemplo en un salto de línea de un correo o de un log. El relleno explicado muestra la aritmética.
Muchos decodificadores estándar son menos tolerantes. atob() en los navegadores rechaza - y _ con InvalidCharacterError, y base64.urlsafe_b64decode de Python lanza Incorrect padding cuando falta el =.
Tokens, cookies y parámetros de URL
- JWT. Un token tiene la forma
xxxxx.yyyyy.zzzzz. Las dos primeras partes son JSON en Base64URL; la tercera es la firma, que es binaria. Decodifica las partes una a una aquí, o pega el token entero en el decodificador JWT, que además muestra la caducidad y verifica firmas. Base64 en JWT explica el formato. - Cookies e ID de sesión. Algunas cookies de sesión de frameworks, las de Flask por ejemplo, unen datos en Base64URL y una firma con puntos. Decodifica solo la parte de datos.
- Parámetros de URL. El
statede OAuth, los destinos de redirección y los enlaces para compartir a veces llevan JSON en Base64URL. Si el valor contiene%2Fo%2B, se codificó además con porcentajes y hay que decodificarlo para URL primero.
Si una cadena mezcla - o _ con + o /, el decodificador se detiene con “La entrada mezcla caracteres estándar (+ /) y URL-safe (- _)”. Eso suele significar que se unieron dos valores o que uno se convirtió solo a medias.
Decodificar Base64URL en código
// Node.js
Buffer.from("c3ViamVjdHM_X2Q", "base64url").toString("utf8"); // "subjects?_d"
// Browsers with Uint8Array.fromBase64
new TextDecoder().decode(Uint8Array.fromBase64("c3ViamVjdHM_X2Q", { alphabet: "base64url" }));
import base64
def b64url_decode(s: str) -> bytes:
return base64.urlsafe_b64decode(s + "=" * (-len(s) % 4))
b64url_decode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9") # b'{"alg":"HS256","typ":"JWT"}'
La línea del relleno funciona con cualquier longitud de entrada que sea Base64 válido. Más en Base64 en Node.js, JavaScript y Python.
Preguntas frecuentes
¿Cómo decodifico Base64URL?
Pégalo arriba; no hace falta ningún ajuste. En código, sustituye - por + y _ por /, añade = hasta que la longitud sea múltiplo de 4 y decodifica como Base64 normal, o usa un decodificador URL-safe como Buffer.from(s, "base64url") de Node.
¿Por qué me da un error con el carácter "."?
Has pegado un JWT entero. Sus tres partes van separadas por puntos y cada una se decodifica por separado. Pega una sola parte o usa el decodificador JWT para el token completo.
¿Por qué la línea de estado dice Standard para mi cadena Base64URL?
La cadena no contiene ninguno de -, _, + o /, así que es válida en los dos alfabetos y se decodifica igual de cualquier forma. Muchos encabezados de JWT son así.
¿Y si el valor sigue codificado con porcentajes?
Un = codificado (%3D) se gestiona solo. Otros escapes como %2F indican que el valor pasó por una codificación URL; pásalo antes por el decodificador de URL.