Codificar / decodificar Base64
CodificaciónCodificación y decodificación Base64 segura para UTF-8, con variante URL-safe opcional.
En esta página
¿Qué es Base64?#
Base64 es una forma de escribir bytes arbitrarios usando solo 64 caracteres ASCII imprimibles (A-Z, a-z, 0-9, +, /, con = como relleno). Existe porque gran parte del mundo informático se diseñó para texto —cuerpos de correo, campos JSON, cabeceras HTTP, prefijos data-URI— y se atraganta con los bytes en bruto, sobre todo con los bytes con el bit más alto activo o con códigos de control incrustados. Base64 es la lengua franca a la que acudes cuando necesitas que datos con forma binaria sobrevivan a un canal que solo admite texto.
Cada tres bytes de entrada (24 bits) se convierten en cuatro caracteres base64 (cada uno codifica 6 bits). Por eso la salida de base64 siempre mide un múltiplo de cuatro caracteres y es aproximadamente un 33 % más grande que los bytes originales: la redundancia es el precio de la imprimibilidad. Cuando la longitud de la entrada no es múltiplo de tres, aparecen uno o dos caracteres de relleno = al final.
Esta página codifica y decodifica base64 de forma segura con UTF-8. Una trampa en la que la gente cae a menudo: pasar una cadena directamente a btoa() lanza InvalidCharacterError en cuanto contiene un carácter no ASCII (é, 中文, un emoji). La solución es codificar primero el texto a bytes UTF-8 y luego a base64, justo lo que hace esta herramienta, así café hace el viaje de ida y vuelta correctamente en lugar de lanzar un error.
Cómo usarlo#
- Elige la dirección con el conmutador Codificar / Decodificar en la parte superior izquierda de la barra de herramientas.
- Escribe o pega en el panel de Entrada a la izquierda.
- En modo Codificar, la entrada se trata como texto UTF-8.
- En modo Decodificar, la entrada debe ser una cadena base64. Se toleran los espacios en blanco.
- Marca URL-safe si necesitas el alfabeto base64url (
-y_en lugar de+y/, sin relleno). Es lo que esperan los JWT y muchos esquemas de URL firmada. - El resultado aparece en vivo en el panel de Salida a la derecha. Pulsa Copiar para llevártelo.
- Usa Ejemplo para insertar un par de demostración y Limpiar para reiniciar ambos paneles.
Características principales#
- Seguro con UTF-8 en ambas direcciones. La codificación pasa primero el texto por
TextEncoder, así los caracteres multibyte nunca explotan; la decodificación pasa los bytes porTextDecoderpara restaurar el texto original exacto. - Alfabetos estándar y URL-safe. Una casilla alterna entre base64 clásico (
+/=) y base64url (-_sin relleno), con relleno correcto al decodificar. - Puro lado del cliente. La conversión se ejecuta solo en tu navegador: no hay backend ni petición de red. Pegar aquí un token sensible no lo envía a ninguna parte.
- Línea de estado en vivo. La barra bajo los paneles reporta errores de codificación/decodificación (por ejemplo, una entrada con
%o truncada) en lugar de producir basura en silencio.
Ejemplo detallado#
Con Codificar y modo estándar (no URL-safe), el texto ASCII Hello, World! se convierte en:
SGVsbG8sIFdvcmxkIQ==
Los dos = del final indican que la entrada de 13 bytes no era múltiplo de tres: es lo esperado, no un error.
El manejo de UTF-8 importa en cuanto sales del ASCII. Codificar café (donde é son dos bytes UTF-8, c3 a9) da:
Y2Fmw6k=
Si hubieras llamado a btoa("café") directamente en una consola, habría lanzado un error. Esta herramienta no lo hace, porque primero codifica los bytes UTF-8.
El modo URL-safe reescribe el alfabeto para que la salida nunca lleve caracteres que una URL malinterpretaría: + se convierte en -, / en _ y el relleno = final se elimina (y se reañade automáticamente al decodificar). Toma la salida estándar de arriba, SGVsbG8sIFdvcmxkIQ==: en modo URL-safe los dos = de relleno desaparecen, dando SGVsbG8sIFdvcmxkIQ. El intercambio +// → -/_ solo cambia algo cuando esos caracteres aparecen realmente en la salida, lo cual tiende a ocurrir con payloads binarios como resúmenes de hash o tokens aleatorios: justo el tipo de datos que colocas en una ruta o parámetro de URL sin más escapado.
Preguntas frecuentes#
Mi texto decodificado se ve como mojibake. ¿Qué ha pasado?#
Casi siempre, el base64 que decodificaste era la codificación de bytes en algún otro juego de caracteres (a menudo Latin-1 o Windows-1252), no UTF-8. Esta herramienta decodifica los bytes como UTF-8, así que un é codificado en Latin-1 (0xe9, un byte suelto) no es UTF-8 válido y se muestra mal. Averigua cómo codificó el texto original el otro extremo, o recodifícalo primero como UTF-8.
¿Base64 estándar o base64url, cuál quiero?#
El estándar (+/=) es el valor por defecto para todo lo que no va a una URL: adjuntos de correo, URI data:, campos JSON que transportan binario. Activa URL-safe cuando la salida irá en una ruta de URL, una cadena de consulta o un segmento de JWT, donde +, / e = rompen el análisis o los destroza el transporte. La decodificación acepta cualquiera de las dos formas automáticamente.
¿Por qué la salida codificada es más larga que mi entrada?#
Es inherente, no un fallo. Base64 empaqueta 6 bits por carácter en lugar de 8, así la salida es aproximadamente 4/3 del tamaño de la entrada: más o menos un 33 % de sobrecarga. Para entradas muy pequeñas puede parecer aún mayor en relación con el original, porque la estructura fija domina.
¿Puede esto descifrar o romper una cadena base64?#
No: base64 es una codificación, no cifrado. Es totalmente reversible por diseño y no lleva ninguna clave. Cualquiera con la cadena puede decodificarla. Si de verdad necesitas secreto, cifra primero (por ejemplo con un esquema de cifrado autenticado) y luego codifica en base64 el texto cifrado para transportarlo.