Codificación Base64: qué es, qué no es y cuándo usarla

Base64 aparece en JWTs, data URIs, tokens de API y adjuntos de correo. Aquí explicamos cómo funciona realmente y el error de seguridad más común.

Base64 es un esquema de codificación binario-a-texto que convierte datos binarios arbitrarios en una cadena de 64 caracteres ASCII imprimibles. Existe porque muchos protocolos —correo electrónico, cabeceras HTTP, payloads JSON— fueron diseñados para transportar texto, no binario crudo. Cuando necesitas incrustar una imagen en un documento HTML, incluir un PDF en una respuesta de API JSON, o almacenar un token binario en una cookie, Base64 ofrece una codificación confiable y universalmente soportada.

Entender qué no es Base64 es igual de importante: no es cifrado. Cualquiera puede decodificar un string Base64 en milisegundos sin ninguna clave secreta. El resultado codificado parece caracteres aleatorios pero no tiene seguridad alguna — nunca uses Base64 para proteger datos sensibles.

Por qué existe Base64

El origen de Base64 está en una restricción histórica: muchos sistemas de comunicación fueron diseñados para manejar texto de 7 bits ASCII, no datos binarios arbitrarios. El correo electrónico (SMTP), por ejemplo, fue diseñado alrededor del ASCII de 7 bits. Cuando intentas enviar una imagen PNG o un PDF a través de un protocolo que solo maneja caracteres ASCII imprimibles de forma confiable, el resultado es corrupción de datos.

Base64 resuelve esto codificando cualquier dato binario como una secuencia de 64 caracteres ASCII imprimibles. El alfabeto de 64 caracteres consiste en A–Z, a–z, 0–9 y dos caracteres adicionales — en Base64 estándar son + y /, con = usado como relleno.

El error de seguridad más común

No puede decirse con suficiente claridad: Base64 no es un mecanismo de seguridad. Es una codificación reversible y determinista sin clave secreta. Si codificas en Base64 una contraseña, clave de API o cualquier credencial sensible y la incluyes en código del lado del cliente o en una respuesta de API, ese dato es efectivamente texto plano.

La confusión surge porque las cadenas codificadas parecen texto cifrado — aleatorias e ilegibles a simple vista. Pero la codificación es trivialmente reversible. El propósito de Base64 es hacer que los datos binarios sean seguros para sistemas basados en texto, no ocultarlos.

Base64 estándar vs. URL-Safe

Los dos caracteres que varían entre variantes de Base64 son el 62.° y 63.° caracteres. Base64 estándar usa + y /. Estos caracteres tienen significado especial en las URLs — + se decodifica como espacio en query strings, y / es separador de ruta. Base64url reemplaza + por - y / por _. Esta es la variante usada dentro de tokens JWT y flujos OAuth.

Cuándo usar Base64

  • Data URIs: Imágenes inline en HTML y CSS usan el formato data:image/png;base64,...
  • Payloads binarios en JSON: JSON no tiene tipo binario. Si necesitas incluir un PDF o imagen en una API JSON, Base64 es el enfoque estándar.
  • Adjuntos de correo (MIME): SMTP usa Base64 para transportar adjuntos no-ASCII de forma confiable.
  • Tokens e identificadores: Muchas secuencias de bytes aleatorios se codifican en Base64url para representación compacta y segura en URLs.

Consideraciones de rendimiento

El incremento de tamaño del 33% suele ser insignificante para payloads pequeños pero significativo para archivos binarios grandes. Las implementaciones en WebAssembly pueden codificar cientos de megabytes por segundo, razón por la que las herramientas Base64 del lado del cliente pueden manejar archivos grandes sin un viaje al servidor.