Desarrollo · 4 min de lectura ·

Base64 explicado: para qué sirve y por qué no es cifrado

Base64 aparece en correos, data URI, cabeceras de API y JWT. Cómo funciona, por qué hace los datos un tercio más grandes y por qué nunca oculta nada.

Base64 está en todas partes en el software: adjuntos de correo, imágenes incrustadas en CSS, la cabecera Authorization de HTTP Basic y las partes de un JWT. Tiene una sola tarea: escribir cualquier dato, incluidos bytes binarios, usando solo caracteres de texto seguros.

Cómo funciona

Base64 toma los datos de tres en tres bytes (24 bits) y los divide en cuatro grupos de 6 bits. Cada grupo es un número de 0 a 63 que corresponde a uno de 64 caracteres: A-Z, a-z, 0-9, + y /. Cuando la entrada no se divide en grupos de tres, unos signos = rellenan el final.

Texto   M        a        n
Bytes   01001101 01100001 01101110
6 bits  010011 010110 000101 101110
Base64  T      W      F      u       →  TWFu

Por qué existe

Muchos sistemas antiguos, sobre todo el correo, se diseñaron para texto y podían estropear bytes arbitrarios. Base64 convierte cualquier cosa en caracteres normales que atraviesan esos canales sin cambios. El precio es el tamaño: cada 3 bytes se convierten en 4 caracteres, así que los datos codificados ocupan un 33 % más.

No es cifrado

No hay clave. Cualquiera puede decodificar Base64 al instante, así que no oculta nada. Una contraseña en una cabecera Basic (dXNlcjpwYXNz es simplemente user:pass) está tan expuesta como el texto plano. Protege los secretos con HTTPS y cifrado de verdad, y nunca trates Base64 como una medida de seguridad.

Variantes que te encontrarás

Base64url cambia + y / por - y _ y suele quitar el relleno, de modo que el resultado es seguro en URL y nombres de archivo; los JWT lo usan. Las data URI ponen los datos codificados en línea, como data:image/png;base64,iVBOR…, lo que ahorra una petición en imágenes diminutas pero hace más pesadas las grandes.

El tamaño en cifras

La longitud codificada es 4 × ceil(n / 3) caracteres para n bytes, así que el aumento es de alrededor de un 33 %, más los saltos de línea si el codificador los añade.

Imagen de 100 KB    →  unos 133 KB de Base64
Adjunto de 1 MB     →  unos 1,33 MB (más saltos de línea en el correo)

Por qué falla la decodificación

  • Falta el relleno: algunos sistemas quitan los signos = finales y los decodificadores estrictos rechazan la entrada. Añade = hasta que la longitud sea múltiplo de 4.
  • El alfabeto equivocado: Base64url usa - y _ en lugar de + y /. Decodifícalo con un decodificador Base64url o vuelve a cambiar los caracteres antes.
  • Saltos de línea y espacios: el correo (MIME) corta Base64 cada 76 caracteres. La mayoría de los decodificadores los ignora, pero no todos.
  • Texto en la codificación equivocada: al decodificar obtienes bytes. Si eran texto UTF-8 pero se leen como Latin-1, las tildes, la ñ o el hebreo se convierten en caracteres extraños.

La trampa de btoa en JavaScript

La función btoa() del navegador solo acepta caracteres de Latin-1 y lanza un error con hebreo, chino o emojis. Codifica primero el texto a bytes UTF-8, por ejemplo con TextEncoder, y después a Base64.

Cuándo usarlo y cuándo no

Base64 es la herramienta adecuada cuando datos binarios tienen que viajar por un canal pensado para texto: cargas JSON y XML, correo, URI de datos y cabeceras HTTP. No sirve para ocultar datos, ni para reducirlos (siempre crecen), ni para guardar archivos grandes en una base de datos, donde una columna binaria o un almacenamiento de objetos son más pequeños y rápidos. Si el destino acepta bytes en bruto, envía bytes en bruto.

Pruébalo

El codificador Base64 de 4Dev convierte texto a Base64 mientras escribes. Usa UTF-8, así que las tildes, la ñ, los emoji y cualquier otro texto no inglés se codifican correctamente. Para el camino inverso, usa el decodificador Base64.

Abrir el codificador Base64

LinkedInXFacebook