Cuándo usar Base64 y cuándo elegir otra opción
Evalúa Base64 en API, Data URL y canales de texto; calcula su sobrecarga y distingue codificación, cifrado, hash y firma.
Base64 representa bytes mediante un alfabeto de 64 caracteres. Resulta útil cuando datos binarios deben atravesar un canal diseñado para texto, pero añade tamaño y no proporciona confidencialidad ni autenticidad.
La pregunta correcta no es «¿puedo usar Base64?», sino «¿el sistema receptor exige una representación textual de estos bytes?».
Qué hace Base64
El algoritmo toma grupos de tres bytes, es decir, 24 bits, y los divide en cuatro valores de seis bits. Cada valor selecciona un carácter del alfabeto. Si el último grupo está incompleto, la variante estándar puede añadir = como relleno.
Ejemplo con texto UTF-8:
Hola → SG9sYQ==
El resultado es reversible. Puedes comprobarlo con el codificador y decodificador Base64.
Cuánta sobrecarga añade
La longitud codificada, con relleno, es 4 × ceil(n / 3) para n bytes. En cargas grandes, el aumento se aproxima a un tercio. En entradas pequeñas puede ser proporcionalmente mayor por el redondeo:
| Bytes originales | Caracteres Base64 | Aumento |
|---|---|---|
| 1 | 4 | 300 % |
| 2 | 4 | 100 % |
| 3 | 4 | 33,3 % |
| 1000 | 1336 | 33,6 % |
A esto se suman el contenedor, la memoria temporal y el coste de codificar o decodificar. La compresión HTTP puede cambiar el tamaño transferido, pero no elimina la necesidad de medir el caso real.
Casos adecuados
API y formatos de texto
JSON no tiene un tipo nativo de bytes. Algunos contratos indican que un campo binario debe enviarse como Base64. Sigue exactamente la variante, el relleno y los límites definidos por la API.
Correo y protocolos heredados
MIME usa Content-Transfer-Encoding Base64 cuando contenido binario debe viajar por infraestructuras de texto. Aquí no es una preferencia estética: forma parte del protocolo.
Data URL pequeñas
Una Data URL como data:image/png;base64,... puede simplificar una vista previa o un recurso diminuto. El conversor de imagen a Base64 crea la URL localmente y muestra su tamaño.
Vectores y configuración
Certificados, claves públicas, hashes o firmas se representan a menudo como Base64. La cadena solo transporta bytes; su significado y validación dependen del formato que la envuelve.
Casos en los que conviene evitarlo
Archivos grandes en JSON o bases de datos
Incrustar vídeos o imágenes grandes infla la carga, exige más memoria y dificulta streaming, caché y reintentos. Suele ser mejor almacenar el archivo como objeto y transmitir una referencia autorizada.
Imágenes que deberían aprovechar caché
Una imagen externa puede almacenarse en caché y actualizarse de forma independiente. Incrustada en HTML o CSS, queda ligada al documento y puede obligar a descargar de nuevo ambos recursos.
Contenido sensible
Base64 no cifra. Si necesitas confidencialidad, utiliza un protocolo de cifrado autenticado apropiado y gestiona las claves. TLS protege el transporte, pero no sustituye los controles de acceso ni el cifrado en reposo cuando sean necesarios.
URL sin adaptar el alfabeto
Base64 estándar contiene +, / y, a menudo, =. En componentes de URL puede requerir percent-encoding. Base64url sustituye los dos primeros y suele omitir el relleno según el protocolo. Usa el conversor Base64url cuando esa sea la variante especificada.
Base64 no es hash ni firma
- Base64 representa bytes de forma reversible.
- Un hash resume datos de forma determinista y no está diseñado para recuperar la entrada.
- HMAC autentica un mensaje con una clave compartida.
- Una firma digital permite verificar integridad y autoría según una clave pública y un protocolo.
- El cifrado protege confidencialidad.
Una firma puede mostrarse en Base64, pero Base64 no verifica la firma. Del mismo modo, decodificar las partes de un JWT no demuestra que la firma, el emisor o la caducidad sean válidos.
Lista de decisión
Antes de adoptar Base64, responde:
- ¿El destino exige texto en lugar de bytes?
- ¿Qué variante y política de relleno define?
- ¿La sobrecarga de tamaño es aceptable?
- ¿Necesitas streaming o caché independiente?
- ¿Estás confundiendo representación con seguridad?
- ¿Hay límites de carga en el receptor?
Si el único motivo es que «parece más fácil», mide primero una transferencia real y compara una subida binaria o una referencia de archivo.