¿Qué es la codificación Base64? Una guía completa con ejemplos
Aprende qué es la codificación Base64, por qué existe, dónde se usa y cómo codificar y decodificar cadenas Base64 al instante en tu navegador, sin instalar herramientas.
Abre cualquier aplicación web moderna, inspecciona una petición HTTP, echa un vistazo a un manifiesto de Kubernetes o asómate al interior de un token JWT — Base64 está por todas partes. Es uno de esos esquemas de codificación fundamentales que los desarrolladores encuentran constantemente pero que rara vez se detienen a entender del todo. Esta guía explica qué es Base64, cómo funciona a nivel de bytes, dónde se usa en sistemas reales y cuándo deberías (y cuándo no) recurrir a él.
Puedes codificar y decodificar cualquier cadena Base64 al instante usando el Codificador/Decodificador Base64 de BrowseryTools — gratis, sin registro y sin que nada salga jamás de tu navegador.
¿Por qué existe Base64?
Para entender Base64, necesitas comprender el problema que resuelve. En los primeros días de internet, muchos protocolos de comunicación — en particular el correo electrónico — se diseñaron en torno al texto ASCII de 7 bits. ASCII define 128 caracteres usando 7 bits por carácter. Los datos binarios (imágenes, documentos, ejecutables) usan los 8 bits por byte, produciendo valores de byte que no tenían representación ASCII y que los sistemas más antiguos descartaban, alteraban o interpretaban como comandos de control.
El estándar MIME (Multipurpose Internet Mail Extensions), introducido en 1991 para permitir que el correo electrónico transportara adjuntos, necesitaba una forma de transmitir datos binarios arbitrarios a través de estos canales limpios de 7 bits. La solución fue recodificar los datos binarios usando solo un subconjunto seguro de caracteres ASCII imprimibles — uno en el que todos los sistemas estuvieran de acuerdo y que transmitieran fielmente. Base64 se convirtió en la codificación estándar para este propósito, y el nombre describe el enfoque: usar un conjunto de 64 caracteres seguros para representar cualquier dato binario.
El alfabeto de 64 caracteres
Base64 usa exactamente 64 caracteres, por lo que 6 bits de entrada siempre pueden representarse con un carácter Base64 (26 = 64). El alfabeto estándar definido en el RFC 4648 es:
- Letras mayúsculas
AaZ— valores 0 a 25 - Letras minúsculas
aaz— valores 26 a 51 - Dígitos
0a9— valores 52 a 61 +— valor 62/— valor 63
Un sexagésimo quinto carácter — el signo igual = — se usa como relleno pero no representa datos. El relleno garantiza que la longitud de la salida codificada sea siempre un múltiplo de 4 caracteres, lo que simplifica la decodificación.
Cómo funciona la codificación Base64: 3 bytes → 4 caracteres
Base64 funciona tomando 3 bytes de entrada (24 bits) y dividiéndolos en cuatro grupos de 6 bits. Cada grupo de 6 bits se asigna a un carácter del alfabeto Base64. Como 3 bytes se convierten en 4 caracteres, la codificación Base64 aumenta el tamaño de los datos exactamente en un tercio (33%).
Veamos un ejemplo concreto: codificar la cadena ASCII "Man".
Paso 1 — Convierte cada carácter a su valor de byte ASCII y luego a binario:
M= ASCII 77 =01001101a= ASCII 97 =01100001n= ASCII 110 =01101110
Paso 2 — Concatena los 24 bits en un solo flujo:
01001101 01100001 01101110 ↓ (concatenate all 24 bits) 010011 010110 000101 101110
Paso 3 — Asigna cada grupo de 6 bits al alfabeto Base64:
| Grupo de 6 bits | Valor decimal | Carácter Base64 |
|---|---|---|
010011 | 19 | T |
010110 | 22 | W |
000101 | 5 | F |
101110 | 46 | u |
La codificación Base64 de "Man" es TWFu. Puedes verificarlo usando la herramienta Base64 de BrowseryTools. Cuando la longitud de la entrada no es múltiplo de 3, se añaden caracteres de relleno (= o ==) para llevar la salida a un múltiplo de 4 caracteres. Por ejemplo, "Ma" se codifica como TWE= y "M" se codifica como TQ==.
Casos de uso comunes
Incrustar imágenes en HTML y CSS
En lugar de hacer una petición HTTP aparte para una imagen o un icono pequeño, puedes incrustarlo directamente en tu HTML o CSS como un data URI. El navegador decodifica la cadena Base64 y representa la imagen sin una ida y vuelta de red. Esto es útil para recursos pequeños como favicons, ruedas de carga o iconos en línea en plantillas de correo donde la carga de URL externas puede estar bloqueada.
/* CSS example — embedding a small PNG icon */
.icon {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA...');
}Datos binarios en APIs JSON
JSON es un formato de texto. Si una API necesita transmitir datos binarios — un archivo, una clave criptográfica, una firma, una imagen — dentro de una carga útil JSON, no puede incluir bytes en bruto. Codificar los datos binarios en Base64 los convierte en una cadena de texto plano que JSON puede transportar sin problemas. Muchas APIs que devuelven contenido de archivos, muestras de audio o imágenes en respuestas JSON usan este enfoque.
Autenticación básica HTTP
El esquema de autenticación básica HTTP envía las credenciales en la cabecera Authorization como una codificación Base64 de username:password. Por ejemplo, las credenciales admin:secret se convierten en la cadena YWRtaW46c2VjcmV0, y la cabecera completa se ve así:
Authorization: Basic YWRtaW46c2VjcmV0
Esto no está cifrado — solo está codificado. La autenticación básica debe usarse siempre sobre HTTPS, nunca sobre HTTP plano, porque las credenciales pueden decodificarse trivialmente por cualquiera que intercepte la petición.
Cargas útiles de JWT
Los JSON Web Tokens codifican su cabecera y su carga útil usando Base64URL (una variante segura para URL que se describe más abajo). Las reclamaciones del token — ID de usuario, hora de expiración, roles — se almacenan en la carga útil como un objeto JSON codificado en Base64URL. De nuevo, esto no es cifrado: la carga útil es completamente legible por cualquiera que tenga el token.
Secretos de Kubernetes
Kubernetes almacena los valores de los Secrets como cadenas codificadas en Base64 en los manifiestos YAML. Aquí tienes un ejemplo real de un Secret de Kubernetes:
apiVersion: v1 kind: Secret metadata: name: db-credentials type: Opaque data: username: YWRtaW4= password: cGFzc3dvcmQxMjM=
Para averiguar qué son realmente esos valores, pega YWRtaW4= en el Decodificador Base64 de BrowseryTools. El resultado es admin. Pega cGFzc3dvcmQxMjM= y obtienes password123. Kubernetes codifica en Base64 los valores secretos para un formato YAML seguro, no por seguridad — la seguridad real proviene del RBAC de Kubernetes y del cifrado en reposo, no de la codificación en sí.
La variante Base64URL
El Base64 estándar usa dos caracteres que son especiales en las URLs: + (que significa espacio en la codificación de formularios) y / (que es un separador de rutas). Cuando los datos codificados en Base64 necesitan aparecer en una URL, un parámetro de consulta o un nombre de archivo, estos caracteres causan problemas.
Base64URL lo resuelve sustituyendo:
+se reemplaza por-(guion)/se reemplaza por_(guion bajo)- El relleno final
=a menudo se omite
Base64URL se usa en JWTs, tokens OAuth y cualquier contexto donde la cadena codificada deba sobrevivir a la transmisión por URL sin codificación por porcentaje. La herramienta Base64 de BrowseryTools admite tanto la variante estándar como la variante segura para URL.
Cuándo NO usar Base64
Base64 es la herramienta adecuada en situaciones concretas, pero se usa mal con frecuencia. Aquí tienes cuándo deberías evitarlo:
- Archivos grandes: Base64 aumenta el tamaño de los datos en ~33%. Una imagen de 10 MB se convierte en aproximadamente 13,3 MB al codificarse en Base64. Incrustar archivos grandes como data URIs o cadenas Base64 en JSON ralentiza el análisis, aumenta el uso de memoria y desperdicia ancho de banda. Usa transferencias de archivos directas o URLs de almacenamiento de objetos para cualquier cosa de tamaño no trivial.
- Seguridad: nunca uses Base64 como medida de seguridad. No proporciona ninguna confidencialidad. Si los datos son sensibles, usa cifrado real (AES-GCM, RSA, etc.).
- Almacenamiento: almacenar datos binarios como Base64 en una columna de base de datos desperdicia un 33% más de espacio en comparación con almacenar los bytes en bruto en una columna binaria. Usa tipos binarios nativos de la base de datos (BYTEA en PostgreSQL, BLOB en MySQL) al almacenar datos binarios a gran escala.
Base64 frente a codificación hexadecimal: una comparación
| Propiedad | Base64 | Hex (Base16) |
|---|---|---|
| Conjunto de caracteres | A–Z, a–z, 0–9, +, / (64 caracteres) | 0–9, a–f (16 caracteres) |
| Sobrecarga de tamaño | ~33% más grande | ~100% más grande (2 caracteres por byte) |
| Legibilidad humana | Baja — no reconocible | Moderada — legible a nivel de byte |
| Casos de uso comunes | Adjuntos de correo, JWT, data URIs, cargas útiles de API | Hashes criptográficos, sumas de verificación, códigos de color, direcciones MAC |
| ¿Seguro para URL? | Solo con la variante Base64URL | Sí — todos los caracteres son seguros para URL |
| Bits por carácter | 6 bits | 4 bits |
Usa Base64 cuando necesites una codificación compacta de binario a texto y la amplitud del conjunto de caracteres no cause problemas. Usa hexadecimal cuando importe la inspección humana de los valores de bytes individuales — los resúmenes de hash, las sumas de verificación y las salidas criptográficas se muestran tradicionalmente en hexadecimal precisamente porque cada carácter hexadecimal corresponde directamente a 4 bits, haciendo trivialmente visibles los límites de los bytes.
Codificar y decodificar Base64 en código
La mayoría de los lenguajes proporcionan soporte integrado para Base64. Aquí tienes algunas líneas rápidas para entornos comunes:
// JavaScript (browser or Node.js)
btoa("Hello, World!") // → "SGVsbG8sIFdvcmxkIQ=="
atob("SGVsbG8sIFdvcmxkIQ==") // → "Hello, World!"
# Python
import base64
base64.b64encode(b"Hello, World!") # → b'SGVsbG8sIFdvcmxkIQ=='
base64.b64decode(b"SGVsbG8sIFdvcmxkIQ==") # → b'Hello, World!'
# Bash
echo -n "Hello, World!" | base64
echo "SGVsbG8sIFdvcmxkIQ==" | base64 --decodePara una codificación o decodificación rápida y puntual sin escribir nada de código, la herramienta Base64 de BrowseryTools es la opción más rápida — pega tu cadena, elige codificar o decodificar y el resultado aparece al instante. No se envía nada a un servidor.
Codifica y decodifica Base64 al instante
Tanto si estás decodificando un secreto de Kubernetes, inspeccionando la carga útil de un JWT, creando un data URI para una imagen en línea o simplemente sientes curiosidad por lo que contiene una cadena Base64 — el Codificador/Decodificador Base64 de BrowseryTools lo resuelve con un solo clic. Pega tu entrada, obtén tu salida. Sin anuncios, sin registro, sin que ningún dato salga de tu dispositivo.
Codificador / Decodificador Base64 gratuito — se ejecuta 100% en tu navegador
Abrir herramienta Base64 →Try the Tools — 100% Free, No Sign-Up
Everything runs in your browser. No uploads. No accounts. No ads.
Explore All Tools →