Saltar al contenido

Base64

¿Qué es la Codificación Base64? Cómo funciona y Por qué la usamos

5 min read

¿Qué es la Codificación Base64? Cómo funciona y Por qué la usamos

Si alguna vez has mirado el código fuente de un correo electrónico, inspeccionado un JSON Web Token (JWT), o mirado un archivo HTML donde una imagen estaba incrustada directamente en el código en lugar de enlazada a través de una URL, es probable que hayas visto un bloque de texto masivo que se ve así:

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=

Esta cadena de letras, números y signos de igual de aspecto aleatorio no son datos cifrados (encrypted), ni es texto corrupto. Es Codificación Base64 (Base64 Encoding).

Base64 es un mecanismo increíblemente común utilizado en informática para traducir datos binarios (como imágenes, archivos de audio o programas compilados) a un formato seguro de texto sin formato (plain-text). Pero, ¿por qué necesitamos hacer esto? ¿Por qué las computadoras no pueden simplemente enviarse archivos directamente entre sí sin traducirlos a texto primero?

En esta guía completa, desglosaremos exactamente qué es la codificación Base64, las razones históricas por las que se inventó, las matemáticas subyacentes de cómo convierte los datos, sus casos de uso modernos más comunes y la diferencia crítica entre codificación (encoding) y cifrado (encryption).

¿Por qué necesitamos Base64? La Historia

Para entender Base64, hay que entender los primeros días de Internet y el correo electrónico.

Las computadoras se comunican usando código binario (unos y ceros). Una imagen de un gato es solo una secuencia masiva de datos binarios. Sin embargo, los primeros protocolos de red, específicamente SMTP (Protocolo Simple de Transferencia de Correo), que todavía se utiliza para enrutar correos electrónicos en la actualidad, se diseñaron originalmente solo para manejar texto sin formato.

Específicamente, fueron diseñados para manejar caracteres ASCII de 7 bits. La tabla ASCII de 7 bits solo contiene 128 caracteres: el alfabeto inglés (A-Z, a-z), números (0-9), signos de puntuación y algunos caracteres de control como "retorno de carro" o "salto de línea".

Si intentas enviar datos binarios en bruto (como una imagen JPEG) a través de un sistema antiguo basado en texto como SMTP, el sistema malinterpretará los unos y ceros binarios como caracteres de control ASCII aleatorios. Podría interpretar una parte de tu imagen como un comando de "Eliminar" o un comando de "Fin de archivo", corrompiendo instantáneamente la transferencia.

La solución: Los ingenieros necesitaban una forma de representar datos binarios de 8 bits usando solo los caracteres ASCII de 7 bits seguros e imprimibles. Así nació Base64. Toma cualquier archivo binario y lo traduce completamente a caracteres de texto seguros que nunca romperán un protocolo basado en texto.

¿Cómo funciona realmente Base64?

El nombre "Base64" delata cómo funciona. Al igual que nuestro sistema de conteo estándar es Base-10 (usando los dígitos del 0 al 9), y el binario es Base-2 (usando 0 y 1), Base64 usa un alfabeto de 64 caracteres para representar datos.

El alfabeto Base64 consta de:

  • Letras mayúsculas: A a la Z (26 caracteres)
  • Letras minúsculas: a a la z (26 caracteres)
  • Números: 0 a 9 (10 caracteres)
  • Símbolos: + y / (2 caracteres) (Total = 64 caracteres)

El Proceso de Traducción

A nivel de computadora, los datos se agrupan en Bytes de 8 bits. Debido a que Base64 usa 64 caracteres, y 2 elevado a 6 es 64 ($2^6 = 64$), cada carácter Base64 representa exactamente 6 bits de datos.

Para convertir binario a Base64, la computadora hace lo siguiente:

  1. Toma los datos binarios en fragmentos de 24 bits (lo que equivale exactamente a tres bytes de 8 bits).
  2. Corta esos 24 bits en cuatro fragmentos más pequeños de 6 bits cada uno.
  3. Traduce cada fragmento de 6 bits a su carácter Base64 correspondiente del alfabeto de 64 caracteres.

En resumen: Cada 3 bytes de datos sin procesar se convierten en 4 caracteres de texto Base64.

¿Qué es el signo de igual (=)?

Si has visto cadenas Base64, es probable que hayas notado que a menudo terminan con uno o dos signos de igual (como dGVzdA==). A esto se le llama Relleno (Padding). Dado que el proceso de conversión requiere tomar datos en fragmentos de 3 bytes (24 bits), ¿qué sucede si el tamaño del archivo original no es perfectamente divisible por 3? Si solo queda 1 byte, el algoritmo añade dos signos = al final para "rellenar" el bloque. Si quedan 2 bytes, añade un =. Este relleno le dice al software de decodificación exactamente cómo reconstruir los bytes finales.

Casos de uso modernos comunes

Si bien Base64 se diseñó originalmente para archivos adjuntos de correo electrónico (MIME), en la actualidad se usa mucho en la pila web moderna (web stack).

1. Data URIs en HTML/CSS

En lugar de forzar a un navegador web a realizar una solicitud HTTP separada para descargar un pequeño ícono de imagen, los desarrolladores pueden codificar la imagen en Base64 e incrustarla directamente en el archivo HTML o CSS.

<!-- Ejemplo de una imagen Base64 incrustada -->
<img src="data:image/png;base64,iVBORw0KGgoAAA..." alt="Icon">

Esto ahorra solicitudes de red, lo que puede acelerar los tiempos de carga de la página para gráficos muy pequeños, aunque debe evitarse para fotografías grandes.

2. JSON Web Tokens (JWT)

Si construyes aplicaciones web modernas, es probable que utilices JWT para la autenticación de usuarios. Un JWT consta de tres partes (Header, Payload, Signature) separadas por puntos. El Header (encabezado) y el Payload (carga útil) están completamente codificados en Base64. Esto garantiza que los objetos JSON complejos se puedan pasar de forma segura de un lado a otro en los encabezados HTTP sin romper el protocolo HTTP.

3. Archivos adjuntos de correo electrónico (MIME)

Como se mencionó, este es el caso de uso original. Cuando adjuntas un PDF o una foto a un correo electrónico, tu cliente de correo electrónico codifica automáticamente ese archivo en Base64, incrusta el bloque de texto masivo en el cuerpo del correo electrónico y el cliente de correo electrónico del destinatario lo decodifica nuevamente en un archivo.

4. Autenticación HTTP básica (Basic Auth)

Cuando un navegador te solicita un nombre de usuario y contraseña a través de una ventana emergente incorporada del navegador, envía esas credenciales al servidor utilizando un encabezado como Authorization: Basic dXNlcjpwYXNz. La cadena dXNlcjpwYXNz es solo el texto user:pass codificado en Base64.

Advertencia: ¡Base64 NO es Cifrado (Encryption)!

Este es el concepto erróneo más común y peligroso entre los desarrolladores junior. Base64 proporciona absolutamente cero seguridad.

Es Codificación (Encoding), no Cifrado (Encryption). La codificación cambia el formato de los datos para un transporte seguro. El cifrado codifica los datos utilizando una clave matemática para que las personas no autorizadas no puedan leerlos.

Cualquiera que intercepte una cadena Base64 puede decodificarla instantáneamente sin una contraseña o una clave. Nunca debes usar Base64 para "ocultar" contraseñas, claves API o datos confidenciales de los usuarios. Si decodificas la cadena de autenticación básica dXNlcjpwYXNz, obtienes instantáneamente el nombre de usuario y la contraseña en texto sin formato.

Las desventajas de Base64

Si bien es increíblemente útil, Base64 tiene dos inconvenientes importantes:

  1. Sobrecarga de tamaño (Size Overhead): Debido a que convierte cada 3 bytes en 4 caracteres, la codificación Base64 aumenta el tamaño del archivo exactamente en un 33%. Si tienes una imagen de 3MB y la conviertes a Base64 para ponerla en un archivo HTML, el archivo HTML crecerá en 4MB. Esta es la razón por la que nunca debes incrustar archivos grandes como Data URIs.
  2. Costo de procesamiento: Un cliente (como un navegador web) necesita potencia de CPU para decodificar la cadena Base64 masiva nuevamente a una imagen binaria antes de renderizarla.

Conclusión

Base64 es el héroe anónimo de Internet. Actúa como el traductor universal entre archivos binarios complejos y protocolos de comunicación de solo texto. Si bien hace que los archivos sean un poco más grandes y no proporciona seguridad, su capacidad para empaquetar de forma segura imágenes, documentos y tokens en texto ASCII simple garantiza que la web moderna, y tus correos electrónicos diarios, scontinue funcionando sin problemas.

Si alguna vez necesitas codificar rápidamente una cadena de texto, o decodificar una cadena Base64 para ver qué contiene, ¡puedes usar la herramienta gratuita Base64 Encode/Decode disponible en este sitio web!

Buy me a coffee