Base64 es una forma de representar cualquier dato binario usando solo 64 caracteres imprimibles. No es cifrado, es simplemente «otra manera de escribir» los mismos bytes. Los 64 caracteres son A–Z, a–z, 0–9, + y /, con = como relleno al final. Como esos caracteres viajan sin problema por cabeceras HTTP, JSON, XML, correos y URLs, Base64 se usa para enviar imágenes y datos binarios por canales que solo admiten texto.
¿Por qué 64 caracteres? Porque 64 = 2⁶: cada carácter lleva exactamente 6 bits. El codificador lee 3 bytes (24 bits), los divide en cuatro grupos de 6 bits y convierte cada grupo en un carácter:
Man → TWFu — Toda cadena Base64 que te encuentres, incluidas las de los JWT y los data URI, funciona igual que este ejemplo.
= completa hasta un múltiplo de 4.dXNlcjpwYXNz puede leerlo. Nunca trates una contraseña o una clave de API «pasada por Base64» como si estuviera protegida.Casi nadie decide usar Base64: aparece en una respuesta de API, en una cabecera o en un archivo de configuración. Cada tarjeta es un caso real: qué ves, qué haces aquí y qué obtienes.
Una URL como data:image/png;base64,iVBORw0KGgo… dentro de HTML, CSS o un bundle de webpack.
Copia todo lo que va después de base64,, pégalo aquí y pulsa Decodificar y formatear.
Los contenidos de texto (código SVG, JSON, CSV) se recuperan legibles. Los binarios reales, como un PNG, salen como caracteres ilegibles (mira Problemas habituales más abajo): esta página decodifica a texto, no a archivos.
Un token como eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.sig: tres partes separadas por puntos. Las dos primeras empiezan siempre por eyJ, que es simplemente el inicio de un objeto JSON codificado.
Copia la parte central (entre los dos puntos), pégala aquí y pulsa Decodificar y formatear. O pasa el token entero por el depurador JWT.
El payload con los claims aparece como JSON formateado en una pestaña propia, listo para cambiar a vista de árbol o tabla. Los caracteres URL-safe - y _ se tratan automáticamente.
Una cabecera como Authorization: Basic dXNlcjpwYXNz en un volcado de petición o en los logs de un proxy.
Copia solo lo que va después de Basic, pégalo aquí y pulsa Decodificar y formatear.
Las credenciales en claro, en este caso user:pass. Y un recordatorio de por qué la autenticación Basic solo es aceptable dentro de HTTPS.
Un bloque largo de texto partido en líneas bajo Content-Transfer-Encoding: base64 al ver el código fuente de un correo o un archivo .eml.
Une las líneas en una sola cadena (los saltos de línea internos no forman parte del alfabeto), pégala y pulsa Decodificar y formatear.
El contenido de texto de esa parte del correo. Un adjunto binario real saldrá como ruido, por lo mismo que el PNG de arriba.
Un campo como "payload": "eyJ1c2VySWQiOjQyfQ==" en una respuesta de API: algún servicio ha metido datos codificados donde debería ir texto.
Copia el valor, pégalo aquí y pulsa Decodificar y formatear.
Una nueva pestaña numerada con el resultado formateado como JSON; tu respuesta original se queda intacta en el editor, y puedes compararlas en paralelo.
Dos direcciones, dos botones, sin configurar nada. Todo se ejecuta en tu navegador: no se sube ni se registra nada.
+ y /) con el relleno = correcto.=.Los sitios de codificador de caja única te hacen trabajar de una cadena en cadena. Esta página mantiene una sesión entera:
Cada decodificación abre una pestaña numerada — Base64 #1, Base64 #2, … — en lugar de sobrescribir tu trabajo. Tu Base64 original vive en el editor raíz: el botón + al final de la barra de pestañas regresa a él, y cambiar de pestañas conserva el contenido de cada una. Cierra pestañas con la ✕ al pasar el ratón; cerrar la última te devuelve al codificador.
Pasa el ratón sobre una pestaña y pulsa su icono ⇄, luego pulsa el icono ⇄ de una segunda pestaña. Una barra de aviso confirma la selección y ambos contenidos se abren lado a lado en la página de comparación JSON con sus etiquetas de pestaña — perfecto para descubrir por qué difieren dos resultados supuestamente idénticos.
Cuando una decodificación produce JSON, la barra cambia al juego completo del formateador: vistas Code / Tree / Table, búsqueda, Format, Minify, Anonymize, Escape/Unescape, además de Copy, Paste, Upload y Download. Las decodificaciones que no son JSON permanecen como texto simple.
El noventa por ciento de los informes de "mi Base64 no funciona" caen en cinco grupos:
| Síntoma | Causa | Solución |
|---|---|---|
| Rechazo con “Content is not a valid Base64 string.” | El validador encontró un carácter fuera del alfabeto — normalmente un espacio, salto de línea o comilla copiado junto con la cadena — o la longitud deja un carácter sobrante tras quitar el relleno. | Vuelve a copiar la cadena exacta sin comillas circundantes, une las líneas partidas y comprueba que nada quedó truncado en ningún extremo. |
| Funciona con esta herramienta pero falla en otras (o viceversa) | Falta el relleno =. Muchos decodificadores exigen longitud múltiplo de 4; esta página rellena automáticamente, las herramientas estrictas no. | Añade = hasta que la longitud divida entre 4 antes de alimentar un decodificador más estricto. |
| Un segmento JWT falla al decodificarse en otra parte | Los JWT usan base64url: + pasa a - y / pasa a _, a menudo sin nada de relleno. | Aquí es automático — ambos alfabetos se aceptan y normalizan. En otros sitios, sustituye -/_ por +// y vuelve a rellenar primero. |
La salida decodificada es ilegible, tipo �PNG | La carga era binario real (imagen, zip, fuente). La decodificación produjo los bytes correctos; mostrarlos como texto UTF-8 genera caracteres de reemplazo. | Nada está corrupto — simplemente no puedes mostrar bytes como texto. Para binarios usa herramientas orientadas a archivos o sírvelos mediante una data URI. |
| El Base64 estilo correo no valida | MIME parte la salida en columnas de 76. Aquí solo se recortan los espacios del exterior; los saltos dentro de la cadena son caracteres ilegales. | Une las líneas en una sola cadena (un buscar-y-reemplazar de saltos de línea lo hace) y decodifica de nuevo. |
| “Está en Base64, así que mi clave API queda oculta, ¿no?” | No. Codificar no añade secreto alguno — cualquier decodificador, incluido este, la invierte al instante. | Protege los secretos con cifrado o hashing en un servidor, mantenlos fuera del código cliente por completo y rota cualquier clave que ya se haya enviado codificada en Base64. |
Las mismas operaciones lejos de esta página — entradas idénticas dan salidas idénticas:
| Comando / sintaxis | Qué hace |
|---|---|
| btoa('Man') // 'TWFu' | Codificar en JS de navegador. Solo Latin-1 — falla con emojis o cualquier carácter por encima de U+00FF. |
| atob('TWFu') // 'Man' | Decodificar en JS de navegador. |
| btoa(String.fromCharCode(...new TextEncoder().encode(s))) | Truco de codificación seguro para Unicode — el mismo enfoque que esta herramienta usa internamente, por bloques para entradas grandes. |
| echo -n 'Man' | base64 # TWFu | Codificar por CLI. La opción -n suprime el salto de línea de echo — sin ella codificarías Man\n y obtendrías TWFuCg==. |
| echo 'TWFu' | base64 -d # Man | Decodificar por CLI (GNU coreutils). macOS usa --decode o -D; GNU ofrece además -w 0 para desactivar el ajuste a 76 columnas. |
| data:[mediatype][;base64],DATA | Anatomía de una data URI — p. ej. data:text/plain;base64,SGVsbG8=. Todo lo que sigue a la coma es Base64 puro. |
| header.payload.signature | Anatomía de un JWT: tres segmentos base64url. Cabecera y payload decodifican a JSON; la firma decodifica a bytes crudos y no debería ser legible. |
No. Codificar, decodificar, validar y formatear se hacen en tu navegador con JavaScript. No hay peticiones a ningún servidor, y con la página cargada puedes seguir usándola sin conexión.
Sí. Los caracteres - y _ se normalizan automáticamente y se tolera la falta de relleno. Eso sí, un token completo con puntos no es Base64 válido: decodifica cada parte por separado o usa el depurador JWT.
No. La salida usa siempre el alfabeto estándar (+, /, =). Si el sistema de destino necesita la variante URL-safe, cambia tú + por -, / por _ y quita el = final.
Es intencional. La cadena original se queda en el editor raíz y cada resultado tiene su pestaña numerada, así puedes decodificar varios datos seguidos, revisarlos uno a uno y mandar dos cualesquiera a la comparación sin volver a pegarlos.
No hay un límite artificial; depende de la memoria de la pestaña. Varios MB se manejan con soltura en un ordenador. La codificación se hace por bloques, así que las entradas muy largas no fallan como lo haría una llamada directa a btoa.
Es gratis, sin cuenta, sin límites de uso y sin marcas de agua. Como el resto de herramientas del sitio, se ejecuta en tu dispositivo: tus datos no se envían ni se guardan en ningún servidor.
¿Trabajas con tokens? El depurador JWT decodifica el token completo (cabecera, payload y verificación de firma) y complementa bien la decodificación por partes de esta página. Para seguir editando el resultado, usa el formateador JSON; y para comparar dos resultados, comparar JSON continúa justo donde lo deja la comparación de pestañas.
Pega texto o una cadena Base64 y codifícalo o decodifícalo con un clic. Si el resultado es JSON, se formatea solo, y puedes abrir varias pestañas y compararlas en paralelo. Todo en tu navegador, sin subir nada.
Pega texto o Base64 para empezar