Base64
7 tools
¿Qué es la codificación?
La codificación es el proceso de convertir datos de una representación a otra. En el desarrollo web, la codificación se usa para transmitir datos de forma segura a través de canales diseñados para un conjunto de caracteres limitado.
La codificación de caracteres define cómo los caracteres de texto se mapean a bytes. La codificación Base64 convierte datos binarios a texto ASCII. La codificación URL hace que el texto arbitrario sea seguro para su uso en URLs.
Historia de la codificación de caracteres
La codificación de caracteres es el mapeo entre caracteres (letras, símbolos) y sus representaciones binarias. La evolución de ASCII a Unicode refleja la globalización de la web:
Código Estándar Americano de 7 bits. 128 caracteres: letras inglesas, dígitos, puntuación y códigos de control.
ASCII extendido para lenguas europeas occidentales. Añadió 128 caracteres (letras acentuadas, símbolos). No apto para scripts no latinos.
Conjunto de caracteres universal que cubre todos los sistemas de escritura del mundo. Define puntos de código para más de 149.000 caracteres en 161 scripts.
Codificación de ancho variable de Unicode usando 1–4 bytes por carácter. Compatible con ASCII. La codificación dominante en la web — más del 98% de los sitios web.
Codificación de ancho variable usando 2 o 4 bytes por carácter. Usado internamente por Windows, Java y strings de JavaScript. No compatible con ASCII.
Codificación de ancho fijo: siempre 4 bytes por carácter. Simple pero derrochador. Raramente visto en la web.
Por qué ganó UTF-8
UTF-8 se volvió dominante porque es compatible con ASCII hacia atrás, es autosincronizante y eficiente en espacio para texto latino. Cualquier documento ASCII es un documento UTF-8 válido, lo que hizo que la migración fuera perfecta.
Codificación Base64
Base64 convierte datos binarios a una representación de texto usando solo 64 caracteres ASCII imprimibles: A-Z, a-z, 0-9, + y /. Esto es necesario cuando los datos binarios deben viajar a través de canales que solo manejan texto.
Cómo funciona
Base64 agrupa los bytes de entrada en bloques de 3 bytes (24 bits) y codifica cada bloque como 4 caracteres Base64 (6 bits cada uno). Si la entrada no es múltiplo de 3 bytes, se añaden caracteres de relleno =:
| Entrada | Bytes hex | Base64 |
|---|---|---|
| "Man" | 77 61 6E | TWFu |
| "Ma" | 4D 61 | TWE= |
| "M" | 4D | TQ== |
Los caracteres de relleno = al final indican cuántos bytes faltaban para completar el último grupo de 3 bytes. Base64 estándar siempre produce una salida cuya longitud es múltiplo de 4.
Codificación URL
Las URLs solo pueden contener un conjunto limitado de caracteres ASCII seguros. Cualquier carácter fuera de ese conjunto debe codificarse en porcentaje (codificación URL) antes de colocarse en una URL.
La codificación de porcentaje reemplaza cada byte inseguro con % seguido de dos dígitos hexadecimales que representan el valor de ese byte.
Caracteres comúnmente codificados
| Carácter | Codificado | Notas |
|---|---|---|
| Space | %20 | Más común; usado en envíos de formularios como + en application/x-www-form-urlencoded |
| & | %26 | Separador de cadena de consulta; debe codificarse cuando se usa como valor literal |
| = | %3D | Separador clave-valor en cadenas de consulta; codificar cuando se usa como dato |
| + | %2B | Interpretado como espacio en application/x-www-form-urlencoded; codificar para preservar + |
| # | %23 | Identificador de fragmento; codificar cuando se usa como dato literal en una ruta o consulta |
| / | %2F | Separador de segmento de ruta; codificar cuando se usa como dato literal, no como delimitador de ruta |
| : | %3A | Separador de esquema; codificar en contextos de ruta y consulta |
| @ | %40 | Usado en mailto: y auth; codificar cuando se usa como dato literal |
encodeURI vs encodeURIComponent
JavaScript proporciona dos funciones de codificación con diferentes alcances. encodeURI codifica una URL completa — deja sin codificar los caracteres que tienen significado en las URLs. encodeURIComponent codifica un componente de URL — codifica todos los caracteres excepto A-Z, a-z, 0-9, -, _, ., ~.
Dónde aparece la codificación en el desarrollo web
El encabezado Authorization: Basic codifica las credenciales como Base64(usuario:contraseña). Esto es codificación por conveniencia de transporte, NO seguridad — Base64 es trivialmente reversible. Siempre usa HTTPS con Basic Auth.
Los URI de datos incrustan contenido de archivo directamente en HTML o CSS: data:image/png;base64,.... Codificar imágenes y fuentes elimina las solicitudes HTTP al costo de aumentar el tamaño del documento.
El correo electrónico fue diseñado para ASCII de 7 bits. Los adjuntos binarios (imágenes, PDFs) son codificados en Base64 por MIME antes de la transmisión.
Los tokens JWT usan codificación Base64url (una variante que reemplaza + con - y / con _, sin relleno) para las tres partes. Esto hace que los tokens sean seguros para URLs.
Cualquier dato proporcionado por el usuario en cadenas de consulta URL debe estar codificado en porcentaje. No codificar & o = en un valor corromperá silenciosamente el análisis de la cadena de consulta.
Los nombres de dominio no ASCII (ej. münchen.de) se codifican usando Punycode (prefijo xn--) para compatibilidad con el sistema DNS.
Preguntas frecuentes
No. Base64 es codificación, no cifrado. Es una transformación reversible sin clave secreta. Nunca uses Base64 como medida de seguridad.
Base64 procesa la entrada en grupos de 3 bytes. Si la entrada no es múltiplo de 3 bytes, se agrega relleno =. Un = significa un byte de relleno; == significa dos.
Base64url es una variante segura para URLs que reemplaza + con - y / con _, y típicamente omite el relleno =. Los JWT usan Base64url para las tres partes.
Usa encodeURIComponent para valores individuales (valores de parámetros de consulta, valores de segmentos de ruta). Usa encodeURI para una cadena URL completa donde quieres preservar los caracteres de estructura de URL.
UTF-8 es compatible con ASCII y eficiente en espacio para texto latino. UTF-16 desperdicia espacio para contenido ASCII y no es compatible hacia atrás.
La codificación de porcentaje (codificación URL) representa caracteres como % seguido de su valor de byte hexadecimal de dos dígitos. Por ejemplo, un espacio es %20.
Base64 aumenta el tamaño de los datos en aproximadamente un 33% y añade sobrecarga de CPU para codificación/decodificación. La codificación URL añade una sobrecarga mínima.
Punycode es una codificación para representar caracteres Unicode en el sistema DNS compatible con ASCII. Los nombres de dominio internacionalizados como münchen.de se codifican como xn--mnchen-3ya.de en las consultas DNS.