Base64 vs URL encoding: diferencias explicadas
Base64 y URL encoding (codificación porcentual) aparecen constantemente en el desarrollo web, y confundirlos provoca errores clásicos: tokens que se rompen al pasarlos por la URL, imágenes que no se decodifican o APIs que rechazan datos «codificados» de la forma equivocada.
Ambos convierten datos en texto seguro para un contexto concreto, pero resuelven problemas distintos. Base64 está pensado para representar datos binarios como texto ASCII; URL encoding está pensado para que el texto viaje intacto dentro de una URL.
Vamos a ver qué hace cada uno, cuándo usarlo, sus costes y los errores típicos, con ejemplos que puedes probar tú mismo.
Base64: binario convertido en texto
Base64 toma bytes arbitrarios —una imagen, un PDF, datos binarios— y los representa con 64 caracteres seguros (A–Z, a–z, 0–9, + y /, con = como relleno). Así, datos que contienen bytes imposibles de escribir como texto se vuelven una cadena ASCII transportable.
Su uso estrella es incrustar recursos pequeños en texto: imágenes en data URLs dentro de HTML o CSS, adjuntos en correos MIME, o credenciales en cabeceras HTTP Basic Auth. También es la base de los tokens JWT, que codifican su cabecera y su payload en Base64url (una variante adaptada a URLs).
El coste es el tamaño: Base64 aumenta el volumen un 33 % aproximadamente (cada 3 bytes se convierten en 4 caracteres). Para archivos grandes es un derroche; para fragmentos pequeños, un precio aceptable por la comodidad.
URL encoding: texto seguro para viajar en URLs
URL encoding —o codificación porcentual— sustituye los caracteres no permitidos o con significado especial en una URL por un signo % seguido de su código hexadecimal. El espacio se convierte en %20, la eñe en %C3%B1 y el signo ? (que separa la query) en %3F.
Su misión es que los datos lleguen intactos: sin codificar, un & dentro de un valor rompería la query string al interpretarse como separador de parámetros, y un espacio directamente invalidaría la URL. Todo lenguaje moderno tiene funciones para aplicarlo automáticamente.
A diferencia de Base64, URL encoding no está pensado para datos binarios: codificar bytes arbitrarios así es ineficiente y propenso a errores. Su dominio es el texto —parámetros, rutas, fragmentos— que debe sobrevivir al viaje por la barra del navegador.
Comparativa directa
En propósito, no compiten: Base64 transporta binario como texto; URL encoding protege texto dentro de URLs. Usar Base64 para un parámetro con eñes funciona pero es excesivo; usar URL encoding para una imagen es un despropósito.
En tamaño, Base64 crece un 33 % fijo; URL encoding solo crece en los caracteres especiales (el texto ASCII normal no cambia). En legibilidad, una cadena URL-encoded sigue siendo parcialmente legible (%20 se intuye); un Base64 es opaco.
El punto de encuentro es Base64url: la variante de Base64 que sustituye + por -, / por _ y elimina el relleno =, precisamente para que el resultado pueda viajar en una URL sin necesidad de URL encoding adicional. Los JWT la usan por este motivo.
¿Cuál usar? Guía rápida de decisión
Usa Base64 cuando necesites representar datos binarios como texto: incrustar una imagen pequeña en HTML/CSS, enviar adjuntos en JSON, o codificar credenciales en una cabecera HTTP. Si el resultado va a viajar en una URL, usa la variante Base64url.
Usa URL encoding cuando construyas URLs con datos dinámicos: parámetros de búsqueda con espacios o tildes, nombres de archivo en rutas, valores de formularios enviados por GET. La regla de oro: codifica cada valor por separado, nunca la URL entera (codificar los : y / rompería su estructura).
Y un recordatorio importante: ninguno de los dos es cifrado ni ofuscación segura. Base64 se decodifica en un segundo con cualquier herramienta; no protege contraseñas ni datos sensibles, solo los hace transportables. Si necesitas confidencialidad, usa HTTPS y cifrado de verdad.
Errores clásicos que verás en tu carrera
El más famoso: pegar un Base64 estándar en una URL y que los + se conviertan en espacios al decodificarlo (en query strings, + significa espacio). La solución es Base64url o aplicar URL encoding al Base64.
Otro habitual: la doble codificación. Si codificas un valor ya codificado (%20 se convierte en %2520), el servidor recibe literalmente «%20» en lugar de un espacio. Codifica una sola vez, en el último momento.
Y el tercero: olvidar codificar. Construir URLs concatenando texto con espacios, eñes o & «porque en mi navegador funciona» es una bomba de relojería: funcionará hasta que un carácter especial rompa la petición en producción. Si trabajas con APIs y necesitas inspeccionar datos, formatear JSON (/herramientas-desarrollador/formatear-json/) y validar JSON (/herramientas-desarrollador/validar-json/) con herramientas gratuitas te ahorra horas de depuración con payloads mal formados.
Herramientas gratuitas mencionadas
Preguntas frecuentes
¿Base64 es un método de cifrado?
No. Base64 es solo una codificación: cualquiera puede decodificarla instantáneamente sin clave. Sirve para transportar datos binarios como texto, no para ocultarlos. Nunca lo uses para «proteger» contraseñas o información sensible.
¿Qué diferencia hay entre Base64 y Base64url?
Base64url es una variante adaptada para URLs: sustituye + por -, / por _ y omite el relleno =. Así el resultado no contiene caracteres con significado especial en URLs y no necesita codificación porcentual adicional. Es la que usan los tokens JWT.
¿Cuándo debo aplicar URL encoding?
Siempre que insertes datos dinámicos en una URL: valores de query string, segmentos de ruta con espacios o caracteres no ASCII, y nombres de archivo. Codifica cada valor individualmente con la función de tu lenguaje (encodeURIComponent en JavaScript, urllib.parse.quote en Python) y nunca codifiques la URL completa.
En resumen
Base64 y URL encoding no son intercambiables: el primero convierte binario en texto transportable, el segundo protege texto dentro de URLs. Memoriza la regla —binario a texto, Base64; texto a URL, URL encoding—, usa Base64url cuando ambos mundos se crucen y recuerda que ninguno cifra nada. Con eso evitarás la mayoría de los errores de codificación que rompen integraciones.