Subir un archivo
  1. base64hub
  2. Herramientas web y de tokens
  3. Base64 a Base64URL

Convertidor de Base64 a Base64URL (URL-safe)

Pega Base64 estándar para obtener la forma URL-safe: + pasa a -, / pasa a _ y el relleno = se elimina, salvo que marques Relleno (=).

Gratis sin registro, sin límites Local no se sube nada Actualizado 27 oct 2026
Entrada 0Bytes 0 BSalida 0

Se procesa en tu navegador. Esta página no puede enviar tus datos a ninguna parte – cómo lo sabemos

Cómo convertir Base64 a Base64URL

  1. Pega el Base64 en Entrada · Base64. Los saltos de línea del Base64 ajustado y un prefijo data:...;base64, se eliminan automáticamente.
  2. La cadena URL-safe aparece en Salida · Base64URL.
  3. Marca Relleno (=) bajo la salida si el receptor quiere conservar el = final.
  4. Usa Copiar salida. El selector Base64URL → Base64, o Base64URL a Base64, hace la conversión inversa.

La entrada se decodifica a bytes y se vuelve a codificar, así que una cadena que no es Base64 válido da un error en lugar de un resultado convertido a medias.

Ejemplos

Base64Base64URLNota
PDw/Pz8+Pg==PDw_Pz8-Pg/ y + sustituidos, == eliminado
eyJyb2xlIjoiYWRtaW4+In0=eyJyb2xlIjoiYWRtaW4-In0JSON con un >, un = eliminado
E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw+cM=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cMel challenge PKCE de RFC 7636, apéndice B
+/8=-_8los bytes fb ff
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9sin cambios: no hay +, / ni =

La última fila es habitual. El JSON corto y el texto ASCII a menudo se codifican sin + ni /, y cuando la longitud es múltiplo de 3 bytes tampoco hay relleno, así que las dos formas son idénticas. Por eso también una conversión olvidada puede pasar desapercibida en las pruebas hasta que algún valor produce un + o un /.

Caracteres del Base64 estándar que rompen las URL

Tres caracteres del Base64 estándar tienen un significado especial en las URL:

  • + significa espacio en las query strings, así que ?t=a+b llega como a b en muchos frameworks.
  • / separa segmentos de ruta, así que un Base64 en la ruta puede partirse o enrutarse mal.
  • = separa el nombre de un parámetro de su valor y hay que escribirlo como %3D para ir sobre seguro.

La sección 5 de RFC 4648 define Base64URL para este caso, con - y _ en lugar de + y / y un relleno que se puede omitir. Estos valores no necesitan escapes en rutas, query strings, cookies ni nombres de archivo. El artículo Base64 frente a Base64URL entra en detalle.

Dónde se exige Base64URL

  • JWT y JWS. Los tres segmentos de un JSON Web Token usan Base64URL sin relleno. El decodificador JWT los lee, y Base64 en JWT explica el formato.
  • OAuth PKCE. Las herramientas de hash suelen imprimir el digest SHA-256 del verificador en Base64 estándar, mientras que code_challenge debe ser ese digest en Base64URL sin relleno. Esta conversión es el último paso.
  • WebAuthn y JWK. Los ID de credencial, los challenges y los parámetros de clave de una JSON Web Key son Base64URL.
  • URL firmadas y tokens en enlaces, como los de restablecer contraseña o de descarga, donde el valor va en una ruta o en una query string.

Para codificar texto directamente a Base64URL sin pasar por la forma estándar, usa el codificador Base64URL.

Base64 a Base64URL en código

import base64
base64.urlsafe_b64encode(b"<<???>>").rstrip(b"=").decode()   # 'PDw_Pz8-Pg'
Buffer.from("PDw/Pz8+Pg==", "base64").toString("base64url");   // 'PDw_Pz8-Pg'
"PDw/Pz8+Pg==".replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");   // same, without Buffer

urlsafe_b64encode de Python mantiene el relleno, de ahí el rstrip. La codificación "base64url" de Node lo elimina. Más en las guías de Python y Node.js.

Preguntas frecuentes

¿Convertir a Base64URL cambia los datos?

No. Ambos alfabetos codifican los mismos bytes; solo cambian dos caracteres y el relleno. Al decodificar cualquiera de las dos formas obtienes bytes idénticos.

¿Debo quitar el relleno = al convertir?

Haz lo que pida el receptor. Los JWT (RFC 7515) y PKCE (RFC 7636) exigen no usar relleno. Algunas bibliotecas aceptan ambas formas, y unos pocos decodificadores antiguos lo exigen; en ese caso marca Relleno (=).

¿Puedo convertir Base64 a Base64URL con una expresión regular?

Sí: s.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "") en JavaScript. Supone que la entrada es una sola línea limpia; si viene de un archivo PEM o de un correo, quita antes los saltos de línea.

¿Sirve codificar con porcentajes el Base64 estándar?

Funciona, pero +, / y = se convierten en %2B, %2F y %3D, tres caracteres cada uno, y el valor sigue rompiéndose en sistemas que decodifican la URL dos veces o leen + como un espacio. Base64URL no tiene ninguno de los dos problemas.