Para qué sirve Base64
Base64 existe para mover datos binarios por canales pensados para texto. El correo electrónico, JSON, XML, los atributos HTML, las variables de entorno y las cabeceras HTTP esperan caracteres imprimibles, y muchos de ellos se rompen con bytes en bruto como el nulo, los saltos de línea o los valores por encima de 127. Base64 reescribe cualquier secuencia de bytes usando solo 64 símbolos seguros: A–Z, a–z, 0–9, + y /, con = como relleno.
Lugares típicos donde te lo encuentras:
- La autenticación HTTP Basic, donde
user:passwordse envía comodXNlcjpwYXNzd29yZA==. - Los JSON Web Tokens, cuyas tres partes separadas por puntos son Base64 URL-safe.
- Los adjuntos de correo, que viajan como Base64 dentro de los mensajes MIME.
- Los data URI que incrustan un icono o una fuente pequeños directamente en HTML o CSS.
- Cargas de API y archivos de configuración que necesitan llevar un certificado, una clave o un pequeño bloque binario como cadena.
Base64 es una codificación, no un cifrado. Cualquiera puede decodificarlo en un segundo, así que una cadena Base64 en un archivo de configuración no protege nada. Si necesitas comprobar que los datos no se han alterado, usa un hash.
Cómo funciona la codificación
El codificador toma la entrada de tres en tres bytes, es decir, 24 bits, y los divide en cuatro grupos de 6 bits. Cada valor de 6 bits, de 0 a 63, elige un carácter del alfabeto. Entran tres bytes y salen cuatro caracteres; por eso la salida Base64 siempre es aproximadamente un 33% más grande que la entrada: una imagen de 30 KB se convierte en unos 40 KB de texto.
Cuando la longitud de la entrada no es múltiplo de tres, el último grupo queda corto. El codificador lo completa y marca el hueco con uno o dos signos =. Por eso Man se codifica como TWFu, Ma como TWE= y M como TQ==.
El texto tiene que convertirse en bytes antes de codificarse, y esta herramienta siempre usa UTF-8 en ese paso. La palabra café ocupa cinco bytes en UTF-8 (la é ocupa dos), y un emoji ocupa cuatro. Al decodificar, los bytes se interpretan de nuevo como UTF-8, así que el texto en cualquier alfabeto va y vuelve sin cambios.
La variante URL-safe
Dos caracteres del alfabeto estándar dan problemas fuera del texto plano. En una URL, + puede leerse como un espacio y / como separador de ruta; en un nombre de archivo, / ni siquiera está permitido. El alfabeto URL-safe definido en RFC 4648 los cambia por - y _.
Con la casilla URL-safe marcada, la herramienta hace ese cambio y además quita el relleno = final, que es como lo esperan los JWT y la mayoría de las API web. El decodificador acepta ambas formas: convierte - y _ de vuelta y restaura automáticamente el relleno que falte, así que puedes pegar directamente un segmento de un JWT y leer su JSON. Si ese JSON sale en una sola línea larga, el formateador de JSON lo hará legible.
Codificar archivos como data URI
Codificar un archivo… lee el archivo en tu navegador y genera un data URI completo, como data:image/png;base64,iVBORw0KGgo…. El tipo MIME es el que el navegador indica para el archivo; cuando no puede determinarlo, se usa el genérico application/octet-stream. Puedes pegar el resultado en un <img src>, en un background-image: url(...) de CSS o en una regla @font-face.
Los data URI tienen sentido para recursos pequeños: un icono SVG, una imagen de marcador de 1–2 KB, un logotipo en la firma HTML de un correo. Para algo más grande juegan en tu contra. El texto ocupa un tercio más que el archivo original, no puede almacenarse en caché por separado de la página que lo contiene, e infla el HTML o el CSS que tiene que cargarse antes de que se muestre nada. Un límite práctico son unos pocos kilobytes por recurso.
El archivo entero se lee en memoria y se convierte de una vez, así que los archivos muy grandes pueden ralentizar la pestaña o agotar la memoria. El archivo no se sube a ningún sitio.
Cuando la decodificación falla
El decodificador muestra «Base64 no válido» cuando la entrada contiene caracteres fuera del alfabeto o tiene una longitud imposible. Causas habituales:
- Un prefijo de data URI. Quita todo hasta la coma incluida en
data:image/png;base64,antes de decodificar. - Saltos de línea dentro de la cadena. Los codificadores MIME cortan el Base64 cada 76 caracteres. Si la decodificación falla con texto cortado, únelo antes en una sola línea.
- Errores al copiar. Basta con que falte el último carácter o sobre una comilla de una cadena JSON para romperlo.
El decodificador siempre convierte el resultado en texto. Si los datos originales eran un archivo binario, como una imagen o un ZIP, la salida parecerá símbolos aleatorios y signos de interrogación; es lo esperado, porque esos bytes nunca fueron texto.