¿Qué es la codificación Base64? Guía completa
· Cosyslabs
La codificación Base64 convierte datos binarios en texto ASCII usando un conjunto de 64 caracteres imprimibles. Se utiliza para transmitir de forma segura contenido binario a través de protocolos basados en texto como HTTP y correo electrónico, y para incrustar imágenes o archivos directamente en cargas útiles HTML, CSS y JSON sin corrupción ni pérdida de datos.
Por qué existe Base64
Muchos protocolos —SMTP, cabeceras HTTP, XML— fueron diseñados para transportar texto, no bytes binarios arbitrarios. Cuando se envían datos binarios crudos a través de estos canales, ciertos valores de bytes se interpretan como caracteres de control, saltos de línea o terminadores nulos, lo que corrompe el payload. Base64 resuelve esto mapeando cualquier secuencia de bytes posible a un subconjunto seguro de caracteres ASCII imprimibles.
Cómo funciona Base64: Grupos de 6 bits
Base64 funciona reagrupando datos binarios de bytes de 8 bits en fragmentos de 6 bits.
- Tomar tres bytes de entrada (24 bits en total).
- Dividir en cuatro grupos de 6 bits.
- Mapear cada valor de 6 bits (0–63) a un carácter del alfabeto Base64.
El alfabeto Base64 usa:
A–Z(valores 0–25)a–z(valores 26–51)0–9(valores 52–61)+y/(valores 62–63)=como relleno
Ejemplo:
Entrada: "Man"
Binario: 01001101 01100001 01101110
Grupos: 010011 010110 000101 101110
Valores: 19 22 5 46
Salida: T W F u → "TWFu"
Cuando la longitud de la entrada no es divisible entre tres, se agrega relleno = o ==.
Codificación y decodificación en JavaScript
JavaScript moderno proporciona soporte Base64 integrado para entornos de navegador:
// Codificar
const codificado = btoa("Hello, World!");
console.log(codificado); // "SGVsbG8sIFdvcmxkIQ=="
// Decodificar
const decodificado = atob("SGVsbG8sIFdvcmxkIQ==");
console.log(decodificado); // "Hello, World!"
Para Node.js (v16+), usa Buffer:
// Codificar
const codificado = Buffer.from("Hello, World!").toString("base64");
// Decodificar
const decodificado = Buffer.from("SGVsbG8sIFdvcmxkIQ==", "base64").toString("utf8");
Base64 seguro para URLs
El Base64 estándar usa + y /, que son caracteres reservados en URLs. El Base64 seguro para URLs los reemplaza:
| Estándar | Seguro para URL |
|---|---|
+ | - |
/ | _ |
= | omitido o %3D |
Los tokens JWT usan Base64 seguro para URLs sin relleno. Para decodificar un payload JWT, necesitas restaurar el relleno antes de decodificar:
function decodificarPayloadJwt(token) {
const [, payload] = token.split(".");
const conRelleno = payload.replace(/-/g, "+").replace(/_/g, "/");
const longitudRelleno = (4 - (conRelleno.length % 4)) % 4;
return JSON.parse(atob(conRelleno + "=".repeat(longitudRelleno)));
}
URIs de datos
Las URIs de datos incrustan el contenido de archivos directamente en HTML o CSS usando Base64:
<!-- Imagen PNG en línea -->
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." />
<!-- SVG en línea en CSS -->
.icono {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucy...");
}
Las URIs de datos son útiles para:
- Íconos pequeños que reducen solicitudes HTTP
- Apps offline/PWA que necesitan activos incrustados
- Plantillas de correo donde las imágenes externas son bloqueadas
Evita las URIs de datos para imágenes grandes. Aumentan el tamaño del HTML, evitan el caché del navegador y no pueden cargarse de forma diferida.
Casos de uso comunes
Autenticación HTTP básica
La cabecera Authorization usa Base64 para codificar credenciales:
Authorization: Basic dXNlcjpwYXNzd29yZA==
Esto se decodifica como user:password. Aquí Base64 proporciona codificación, no cifrado — siempre usa HTTPS.
Adjuntos de correo electrónico (MIME)
SMTP transfiere correos como texto. MIME codifica adjuntos binarios como bloques Base64:
Content-Transfer-Encoding: base64
SGVsbG8sIFdvcmxkIQ==
Respuestas de API
Algunas APIs devuelven datos binarios (miniaturas, PDFs) como cadenas Base64 dentro de JSON:
{
"nombre_archivo": "informe.pdf",
"contenido": "JVBERi0xLjQK..."
}
Base64 no es cifrado
Base64 es reversible sin clave — cualquiera puede decodificarlo instantáneamente. No proporciona ninguna seguridad. Nunca uses Base64 para "ocultar" contraseñas, claves API o datos sensibles.
Sobrecarga de tamaño
Base64 aumenta el tamaño de los datos aproximadamente un 33%: cada 3 bytes se convierten en 4 caracteres. Para un archivo binario de 1 MB, la representación Base64 tiene unos 1,37 MB. Combina con compresión gzip al transmitir para recuperar parcialmente el tamaño.
| Tamaño original | Tamaño Base64 |
|---|---|
| 1 KB | ~1,37 KB |
| 100 KB | ~137 KB |
| 1 MB | ~1,37 MB |
Pruébalo ahora
Usa la Herramienta Codificador/Decodificador Base64 para codificar y decodificar cadenas, archivos y URIs de datos directamente en tu navegador — ningún dato sale de tu máquina.
Resumen
- Base64 convierte binario a texto usando 64 caracteres imprimibles
- Funciona reagrupando bytes de 8 bits en fragmentos de 6 bits
- La variante segura para URLs reemplaza
+//con-/_ - Se usa en autenticación HTTP, adjuntos de correo, URIs de datos y APIs
- No es cifrado — no proporciona ninguna garantía de seguridad
- Agrega ~33% de sobrecarga de tamaño
Más herramientas de Cosyslabs
¿Trabajas con datos binarios y formatos de archivo? Estas herramientas de Cosyslabs cubren casos de uso adyacentes:
- PDF Convert All — Convierte, fusiona, comprime y extrae PDFs en línea.
- Unit Convert All — Convierte tamaños de almacenamiento de datos (bytes ↔ KB ↔ MB ↔ GB).
- Routine Toolkit — Utilidades de productividad del día a día: contador de palabras, calculadora de préstamos y más.
- Cosyslabs — El estudio detrás de Dev Tools !, PDF Convert All, y más.