Ayúdanos a mejorar JSON Workbench: cuéntanos cómo lo usas.
01

Qué es Base64

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:

M
'M' = 77
01001101
a
'a' = 97
01100001
n
'n' = 110
01101110
24 bits
010011010110000101101110→ 4 × 6 bits
T
010011 = 19
W
010110 = 22
F
000101 = 5
u
101110 = 46

Man → TWFu — Toda cadena Base64 que te encuentres, incluidas las de los JWT y los data URI, funciona igual que este ejemplo.

Pesa un 33 % más. 3 bytes de entrada se convierten en 4 caracteres, así que el resultado es aproximadamente un tercio más grande. Si la entrada no es múltiplo de 3, el relleno = completa hasta un múltiplo de 4.
Cualquiera puede revertirlo. No hay clave ni secreto: el mismo alfabeto existe en todos los lenguajes y decodificadores, y revertirlo tarda microsegundos.
Base64 no es cifrado. Sirve para transportar bytes de forma segura, no para ocultarlos. Cualquiera que vea dXNlcjpwYXNz puede leerlo. Nunca trates una contraseña o una clave de API «pasada por Base64» como si estuviera protegida.
02

Dónde te vas a encontrar Base64

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.

Data URI

Lo que ves

Una URL como data:image/png;base64,iVBORw0KGgo… dentro de HTML, CSS o un bundle de webpack.

Qué hacer

Copia todo lo que va después de base64,, pégalo aquí y pulsa Decodificar y formatear.

Lo que obtienes

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.

Token JWT

Lo que ves

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.

Qué hacer

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.

Lo que obtienes

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.

Cabecera Authorization

Lo que ves

Una cabecera como Authorization: Basic dXNlcjpwYXNz en un volcado de petición o en los logs de un proxy.

Qué hacer

Copia solo lo que va después de Basic, pégalo aquí y pulsa Decodificar y formatear.

Lo que obtienes

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.

Correos y partes MIME

Lo que ves

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.

Qué hacer

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.

Lo que obtienes

El contenido de texto de esa parte del correo. Un adjunto binario real saldrá como ruido, por lo mismo que el PNG de arriba.

Base64 dentro de un JSON

Lo que ves

Un campo como "payload": "eyJ1c2VySWQiOjQyfQ==" en una respuesta de API: algún servicio ha metido datos codificados donde debería ir texto.

Qué hacer

Copia el valor, pégalo aquí y pulsa Decodificar y formatear.

Lo que obtienes

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.

03

Codificar y decodificar

Dos direcciones, dos botones, sin configurar nada. Todo se ejecuta en tu navegador: no se sube ni se registra nada.

Texto → Base64

  1. 1Pega cualquier texto, JSON, XML o CSV en el editor vacío (o usa Pegar).
  2. 2Pulsa Codificar: el contenido del editor se sustituye por su versión Base64. La codificación es UTF-8, así que los acentos, la ñ, los emojis y otros alfabetos se conservan sin corromperse.
  3. 3Llévate el resultado con Copiar o Descargar. La salida usa el alfabeto estándar (+ y /) con el relleno = correcto.

Base64 → texto o JSON

  1. 1Pega la cadena Base64, estándar o URL-safe, con o sin relleno =.
  2. 2Pulsa Decodificar y formatear (con sangría) o Decodificar y minificar (en una sola línea). Un Base64 inválido se rechaza con un mensaje de error en vez de producir basura.
  3. 3Si el texto decodificado es JSON válido, se abre formateado y validado en una pestaña nueva; si no, se abre como texto plano.
¿Cuál usar? Codificar reemplaza el contenido por su versión codificada; decodificar deja el original a salvo y abre el resultado al lado. La asimetría es intencional: volver a codificar es barato, pero el original a veces no lo es.
04

Pestañas y comparación

Los sitios de codificador de caja única te hacen trabajar de una cadena en cadena. Esta página mantiene una sesión entera:

Sesiones multi-pestaña

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.

Comparación entre pestañas

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.

El JSON decodificado recibe todas las herramientas

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.

Límites honestos: las pestañas viven en memoria durante esta visita — no sobreviven a una recarga. Y como las pestañas no-JSON son texto plano, el botón Upload solo aparece cuando el contenido se ha reconocido como JSON.
05

Problemas típicos: síntoma → causa → solución

El noventa por ciento de los informes de "mi Base64 no funciona" caen en cinco grupos:

SíntomaCausaSolució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 parteLos 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 �PNGLa 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 validaMIME 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.
06

Chuleta

Las mismas operaciones lejos de esta página — entradas idénticas dan salidas idénticas:

Comando / sintaxisQué 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 # TWFuCodificar 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 # ManDecodificar 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],DATAAnatomía de una data URI — p. ej. data:text/plain;base64,SGVsbG8=. Todo lo que sigue a la coma es Base64 puro.
header.payload.signatureAnatomí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.
07

Preguntas frecuentes

¿Se suben mis datos a algún servidor?

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.

¿Decodifica el Base64 URL-safe que usan los JWT?

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.

¿Codificar genera Base64 URL-safe?

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.

¿Por qué decodificar abre una pestaña nueva en vez de reemplazar mi texto?

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.

¿Hasta qué tamaño puedo llegar?

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? ¿Hace falta registrarse?

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.