Para qué sirve Base64 (y por qué no es cifrado)
Cómo convierte Base64 cualquier dato en texto, paso a paso, y en qué situaciones se usa realmente.
This guide is currently available in Spanish only. Your browser can translate it automatically.
El problema que resuelve
Muchos sistemas se diseñaron para transportar texto, no datos binarios arbitrarios: el correo electrónico, los formularios web, los formatos JSON y XML o las propias URLs. Si intentas meter directamente los bytes de una imagen en uno de esos canales, algunos bytes se interpretan como caracteres de control o se corrompen por el camino. Base64 soluciona esto convirtiendo cualquier secuencia de bytes en texto formado solo por caracteres «seguros».
El alfabeto de 64 caracteres
Base64 usa 64 símbolos: las 26 letras mayúsculas (A–Z), las 26 minúsculas (a–z), los 10 dígitos (0–9) y dos símbolos más, + y /. Cada símbolo representa un número del 0 al 63, es decir, exactamente 6 bits. Además se usa = como relleno.
Cómo funciona, paso a paso
Codifiquemos la palabra «Sol»:
- Pasar a bytes: S = 83, o = 111, l = 108.
- Escribirlos en binario:
01010011 01101111 01101100(24 bits en total). - Reagrupar en bloques de 6:
010100 110110 111101 101100. - Convertir cada bloque a su número: 20, 54, 61, 44.
- Buscar cada número en el alfabeto: 20 = U, 54 = 2, 61 = 9, 44 = s.
Resultado: U29s. Tres bytes de entrada se convierten siempre en cuatro caracteres de salida.
El relleno con «=»
¿Qué pasa si el número de bytes no es múltiplo de 3? Se completan los bits que faltan con ceros y se añaden signos = al final para indicar cuántos bytes eran de relleno: un = si sobraban 2 bytes y == si sobraba 1. Por ejemplo, «Hola» (4 bytes) se codifica como SG9sYQ==.
Para qué se usa en la práctica
- Imágenes incrustadas: las data URLs del tipo
data:image/png;base64,iVBOR…permiten meter una imagen pequeña directamente en HTML o CSS. - Correo electrónico: los adjuntos viajan codificados en Base64 dentro del mensaje.
- APIs y JSON: para enviar archivos o datos binarios dentro de un campo de texto.
- Autenticación HTTP básica: el usuario y la contraseña se envían como
usuario:contraseñacodificado en Base64. - Tokens JWT: sus tres partes usan una variante llamada Base64URL, que cambia
+y/por-y_para poder ir en una URL.
Por qué Base64 no es cifrado
Es un error frecuente pensar que un texto en Base64 está «protegido» porque no se puede leer a simple vista. No lo está: Base64 es una codificación, no un cifrado. No usa ninguna clave y cualquiera puede decodificarlo al instante. El caso de la autenticación básica lo demuestra: si esa cabecera viaja sin HTTPS, cualquiera que la intercepte puede leer la contraseña.
Si necesitas que un dato sea secreto, hay que cifrarlo con un algoritmo de verdad (como AES) y una clave. Y si lo que necesitas es comprobar que un dato no ha cambiado, lo adecuado es una función hash.
El coste: ocupa más
Como cada 3 bytes se convierten en 4 caracteres, el resultado ocupa aproximadamente un 33 % más que el original. Por eso no conviene usar Base64 para incrustar imágenes grandes en una página web: es mejor enlazarlas como archivos normales.