Codificador y decodificador Base64URL

Convierte texto, bytes en hexadecimal o archivos a Base64 seguro para URL y viceversa. El alfabeto usa - y _ en lugar de + y /, y el relleno está desactivado de forma predeterminada, como en los JSON Web Tokens y en OAuth PKCE.

Se ejecuta por completo en tu navegador. No se sube nada.

Cómo se usa

  1. Elige Codificar o Decodificar. La variante Segura para URL viene preseleccionada y el Relleno, desactivado.
  2. Escribe o pega texto, introduce bytes en hexadecimal o abre un archivo. El resultado se actualiza mientras escribes.
  3. Activa el Relleno solo si el sistema de destino necesita signos = al final.
  4. Copia el resultado o descárgalo.

¿Qué es Base64URL?

Base64URL se define en la sección 5 de RFC 4648 como "Base 64 Encoding with URL and Filename Safe Alphabet" (codificación Base 64 con alfabeto seguro para URL y nombres de archivo). Funciona exactamente igual que el Base64 estándar, con 6 bits por carácter, pero cambia los dos caracteres que causan problemas en las URL y en las rutas de archivo:

Base64 estándarBase64URL
Valor 62+-
Valor 63/_
Relleno=, obligatorionormalmente se omite

En una URL, + puede interpretarse como un espacio, / separa los segmentos de la ruta y = separa las claves de consulta de sus valores, por lo que el Base64 estándar debe codificarse con porcentajes antes de incluirlo en un enlace. Base64URL no necesita ningún escape. RFC 4648 permite omitir el relleno cuando la longitud se conoce por el contexto, y la mayoría de las especificaciones basadas en Base64URL hacen precisamente eso.

Dónde se usa Base64URL

  • JSON Web Tokens. El encabezado, la carga útil y la firma de un JWT van cada uno en Base64URL sin relleno (RFC 7515). Puedes leer uno con el decodificador JWT.
  • OAuth 2.0 PKCE. El code_challenge es la forma Base64URL sin relleno del hash SHA-256 del code verifier (RFC 7636), por lo que siempre tiene 43 caracteres.
  • JSON Web Keys y WebAuthn. Los parámetros de clave como n, e, x e y, así como los desafíos y los ID de credencial de WebAuthn, se intercambian en Base64URL.
  • Tokens, ID y nombres de archivo. Los enlaces de restablecimiento, las URL firmadas y las claves de caché llevan Base64URL sin escapes; un ID aleatorio de 16 bytes se convierte en 22 caracteres. En sistemas de archivos que no distinguen mayúsculas y minúsculas, es preferible Base32, porque Base64URL sí las distingue.

Conversión entre Base64 y Base64URL

Ambas variantes codifican los mismos bytes, así que la conversión consiste en cambiar caracteres: sustituye + por - y / por _ y, después, elimina los = finales. Para volver, cambia de nuevo los caracteres y añade = hasta que la longitud sea múltiplo de 4. El decodificador de esta página acepta ambos alfabetos, con o sin relleno.

// Node.js 16+
Buffer.from(data).toString('base64url')
Buffer.from(str, 'base64url')

# Python (urlsafe_b64encode conserva el relleno)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

// Java
Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)

Especificación

AlfabetoA-Z a-z 0-9 - _
Tamaño de salida4 caracteres por cada 3 bytes (aprox. 133%)
RellenoOpcional, normalmente se omite
EstándarRFC 4648, sección 5
Distingue mayúsculas y minúsculasSí

Ejemplos

Entrada (UTF-8)Salida
Hello, World!SGVsbG8sIFdvcmxkIQ
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

Preguntas frecuentes

¿Base64URL es lo mismo que aplicar codificación URL a una cadena Base64?
No. La codificación porcentual del Base64 estándar convierte +, / y = en %2B, %2F y %3D, lo que alarga la cadena. Base64URL usa un alfabeto diferente, así que no necesita ningún escape. Las dos formas no son intercambiables sin una conversión.
¿Base64URL debe llevar relleno?
Depende de quién lo consuma. JWT, JSON Web Keys y PKCE exigen omitir el relleno, mientras que urlsafe_b64encode de Python y el codificador URL predeterminado de Java lo añaden. En caso de duda, omítelo; este decodificador acepta ambas formas.
¿Por qué un decodificador Base64 estándar rechaza mi cadena Base64URL?
Los decodificadores estándar estrictos no aceptan - ni _, y algunos exigen relleno. Cambia los caracteres y añade signos = hasta que la longitud sea múltiplo de 4, o decodifica la cadena aquí.
¿Cómo compruebo un code challenge de PKCE?
El challenge es BASE64URL(SHA256(code_verifier)) sin relleno. Decodifícalo aquí con el Formato de salida en Hexadecimal: un valor correcto da exactamente 32 bytes, que puedes comparar con el hash SHA-256 del verifier.