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:

ASCII1963
128 caracteres

Código Estándar Americano de 7 bits. 128 caracteres: letras inglesas, dígitos, puntuación y códigos de control.

Latin-11987
256 caracteres

ASCII extendido para lenguas europeas occidentales. Añadió 128 caracteres (letras acentuadas, símbolos). No apto para scripts no latinos.

Unicode1991
149 186+ caracteres

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.

UTF-81993
Todo Unicode caracteres

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.

UTF-161996
Todo Unicode caracteres

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.

UTF-322000
Todo Unicode caracteres

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 =:

EntradaBytes hexBase64
"Man"77 61 6ETWFu
"Ma"4D 61TWE=
"M"4DTQ==

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ácterCodificadoNotas
Space%20Más común; usado en envíos de formularios como + en application/x-www-form-urlencoded
&%26Separador de cadena de consulta; debe codificarse cuando se usa como valor literal
=%3DSeparador clave-valor en cadenas de consulta; codificar cuando se usa como dato
+%2BInterpretado como espacio en application/x-www-form-urlencoded; codificar para preservar +
#%23Identificador de fragmento; codificar cuando se usa como dato literal en una ruta o consulta
/%2FSeparador de segmento de ruta; codificar cuando se usa como dato literal, no como delimitador de ruta
:%3ASeparador de esquema; codificar en contextos de ruta y consulta
@%40Usado 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

Autenticación Básica HTTP

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.

URI de datos

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.

Adjuntos de correo MIME

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.

Tokens JWT

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.

Parámetros de cadena de consulta

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.

Nombres de dominio internacionalizados

Los nombres de dominio no ASCII (ej. münchen.de) se codifican usando Punycode (prefijo xn--) para compatibilidad con el sistema DNS.

Preguntas frecuentes

¿Es Base64 una forma de cifrado?

No. Base64 es codificación, no cifrado. Es una transformación reversible sin clave secreta. Nunca uses Base64 como medida de seguridad.

¿Por qué la salida Base64 termina en == a veces?

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.

¿Cuál es la diferencia entre Base64 y Base64url?

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.

¿Cuándo debo usar encodeURI vs encodeURIComponent?

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.

¿Por qué es mejor UTF-8 que UTF-16 para la web?

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.

¿Qué es la codificación de porcentaje?

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.

¿Afecta la codificación al rendimiento?

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.

¿Qué es Punycode?

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.