ToolPal
Código de programación mostrado en una pantalla de computadora

Guía completa de codificación Base64 — Conceptos y práctica

📷 Luis Gomes / Pexels

Guía completa de codificación Base64 — Conceptos y práctica

Aprende qué es la codificación Base64, cómo funciona y cuándo usarla. Incluye ejemplos prácticos y una herramienta gratuita de codificación/decodificación en línea.

DPor Daniel Park14 de marzo de 202610 min de lectura

¿Qué es la codificación Base64?

Base64 es un esquema de codificación de binario a texto que representa datos binarios como una cadena ASCII. Convierte datos binarios en 64 caracteres imprimibles — A–Z, a–z, 0–9, + y / — haciéndolos seguros para transmitir a través de protocolos basados en texto.

El nombre "Base64" proviene del hecho de que se usan exactamente 64 caracteres ASCII distintos. Esto es intencional: 64 es una potencia de 2 (2^6), lo que hace que las conversiones entre binario y Base64 sean sencillas y eficientes.

Si has hecho algún desarrollo web, casi con certeza has encontrado Base64 sin darte cuenta. Esa larga cadena de caracteres aparentemente aleatorios que termina en uno o dos signos =? Hay una buena probabilidad de que sea Base64.

¿Por qué usar Base64?

El problema central que resuelve Base64 es simple. Muchos sistemas y protocolos fueron diseñados para manejar solo texto — no pueden pasar datos binarios sin procesar de manera confiable. Si envías una imagen JPEG a través de un protocolo de correo electrónico que espera texto ASCII, los datos se corromperán porque ciertos valores de bytes tienen significados especiales en los protocolos de texto.

Base64 resuelve esto convirtiendo todos los datos en caracteres ASCII seguros e imprimibles.

  • Adjuntos de correo electrónico: MIME usa Base64 para codificar archivos binarios dentro de los mensajes de correo
  • URIs de datos: Incrustar imágenes directamente en HTML o CSS sin una solicitud HTTP adicional
  • Autenticación de API: HTTP Basic Auth codifica las credenciales en Base64
  • Tokens JWT: JSON Web Tokens usan codificación Base64URL para su encabezado y payload
  • Archivos de configuración: Almacenar datos binarios (certificados, claves) de forma segura en archivos de texto YAML o JSON
  • Almacenamiento en base de datos: Guardar valores binarios pequeños en columnas basadas en texto
  • Parámetros de URL: Pasar datos binarios de forma segura a través de cadenas de consulta URL

Cómo funciona Base64

Desglosar el proceso de codificación paso a paso lo hace fácil de entender:

  1. Toma tus datos binarios (por ejemplo, convierte texto a bytes ASCII)
  2. Divídelos en grupos de 6 bits (en lugar de los habituales bytes de 8 bits)
  3. Mapea cada grupo de 6 bits a uno de los 64 caracteres
  4. Agrega relleno (=) si los datos no se dividen uniformemente en grupos de 3 bytes

El alfabeto Base64

El alfabeto Base64 estándar consiste en:

  • A-Z (índices 0–25)
  • a-z (índices 26–51)
  • 0-9 (índices 52–61)
  • + (índice 62)
  • / (índice 63)
  • = para relleno

Ejemplo paso a paso

Codifiquemos manualmente el texto Hi:

Paso 1: Convertir a bytes ASCII H = 72, i = 105

Paso 2: Convertir a binario 72 = 01001000, 105 = 01101001

Paso 3: Concatenar todos los bits 01001000 01101001

Paso 4: Reagrupar en bloques de 6 bits 010010 000110 1001xx

Solo tenemos 16 bits, por lo que el último grupo se rellena con ceros: 010010 000110 100100

Paso 5: Mapear cada valor de 6 bits al alfabeto Base64

  • 010010 = 18 = S
  • 000110 = 6 = G
  • 100100 = 36 = k

Paso 6: Agregar relleno La entrada original tenía 2 bytes (no es múltiplo de 3), por lo que se agrega un carácter de relleno =.

Resultado: SGk=

Entendiendo el relleno

El relleno es una de las partes más confusas de Base64. Las reglas son:

  • Si la longitud de la entrada es divisible por 3: sin relleno
  • Si queda 1 byte: agregar ==
  • Si quedan 2 bytes: agregar =

Ejemplos:

  • A (1 byte) → QQ==
  • AB (2 bytes) → QUI=
  • ABC (3 bytes) → QUJD (sin relleno)

Casos de uso prácticos

Incrustar imágenes en HTML (URIs de datos)

Uno de los usos más prácticos de Base64 es incorporar imágenes pequeñas directamente en HTML o CSS, eliminando solicitudes HTTP adicionales. Esto puede ser útil para íconos pequeños y elementos decorativos.

<img src="data:image/png;base64,iVBORw0KGgo..." />
.icon {
  background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxu...");
}

Cuándo usarlo: Para imágenes de menos de 2–3 KB (íconos pequeños o píxeles de seguimiento 1×1), ahorrar un viaje de red puede mejorar el rendimiento. Para imágenes más grandes, el aumento del 33% en tamaño y la pérdida del caché del navegador lo hacen contraproducente.

Autenticación HTTP Basic

Cuando un servidor requiere Basic Auth, el cliente concatena el nombre de usuario y la contraseña con dos puntos y codifica el resultado en Base64:

username:password → dXNlcm5hbWU6cGFzc3dvcmQ=

El encabezado de solicitud se ve así:

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

Esto es codificación, no cifrado. Cualquiera que intercepte este encabezado puede decodificar las credenciales inmediatamente. Por eso Basic Auth solo debe usarse sobre HTTPS.

Almacenar datos binarios en JSON

JSON no tiene soporte nativo para datos binarios. Cuando necesitas incluir un archivo, imagen o payload binario dentro de un documento JSON, Base64 es el enfoque estándar:

{
  "file": "SGVsbG8gV29ybGQ=",
  "filename": "hello.txt",
  "mimetype": "text/plain"
}

Este patrón es común en las APIs REST que aceptan cargas de archivos como cuerpo de solicitud JSON en lugar de datos de formulario multipart.

Tokens JWT

JSON Web Tokens usan una variante llamada Base64URL, que reemplaza + con - y / con _, y omite el relleno. Un JWT consiste en tres partes codificadas en Base64URL separadas por puntos:

eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiam9obiJ9.abc123signature

Decodificar la primera parte da el encabezado: {"alg":"HS256"}. Decodificar la segunda da el payload: {"user":"john"}.

Adjuntos de correo electrónico

Cuando envías un correo con un adjunto, el archivo binario se codifica en Base64 y se incluye en el cuerpo del mensaje MIME. Tu cliente de correo maneja esto automáticamente, pero internamente los datos del adjunto aparecen como texto Base64 dividido en líneas de 76 caracteres según la especificación MIME.

Base64 vs Base64URL

En realidad hay dos variantes comunes de Base64, y confundirlas es una fuente frecuente de errores:

PropiedadBase64 estándarBase64URL
Caracteres 62–63+ y /- y _
RellenoRequerido (=)Generalmente omitido
Usado enMIME, codificación generalURLs, JWTs, nombres de archivo

Base64URL existe porque +, / y = tienen significado especial en las URLs. Si pones una cadena codificada en Base64 estándar en un parámetro de consulta, el + se interpreta como espacio, / rompe la ruta URL y = entra en conflicto con la sintaxis clave-valor.

Base64 vs Cifrado

Importante: Base64 no es cifrado. Es un esquema de codificación, y cualquiera puede decodificarlo. Nunca uses Base64 solo para proteger datos sensibles.

Este error aparece constantemente. Un desarrollador codifica una clave API o contraseña en Base64 y asume que está oculta. No lo está. Abre las herramientas de desarrollo de tu navegador, pega la cadena en atob(), y el valor original aparece inmediatamente.

Si necesitas proteger datos, usa cifrado adecuado (AES, RSA) o hash (SHA-256, bcrypt). Base64 es para compatibilidad de transporte, no para seguridad.

Errores comunes y trampas

1. Pasar por alto el aumento del 33% en tamaño

Cada 3 bytes de entrada producen 4 bytes de salida. Incrustar una imagen de 1 MB como Base64 en tu HTML significa enviar aproximadamente 1,33 MB de datos, y el navegador no puede cachear esa imagen separadamente de la página. Esta sobrecarga se acumula con archivos grandes.

2. Longitud de línea MIME

El estándar MIME requiere que los datos codificados en Base64 se dividan en líneas de 76 caracteres. Si construyes manualmente mensajes de correo o MIME y omites los saltos de línea, algunos servidores de correo rechazarán o corromperán el mensaje.

3. Confundir Base64 y Base64URL

Decodificar un token JWT con un decodificador Base64 estándar puede fallar o producir resultados incorrectos porque los conjuntos de caracteres difieren. Siempre verifica con qué variante estás trabajando.

4. Doble codificación

Un error sorprendentemente común: codificar datos que ya están codificados. Si codificas una cadena en Base64 y luego la codificas accidentalmente una segunda vez, el resultado es Base64 válido — pero decodificarlo una vez da la primera cadena codificada, no el original. Si tu salida decodificada parece Base64, has doblemente codificado en algún lugar.

5. Confusión de codificación de caracteres

Base64 codifica bytes sin procesar, no caracteres. Una cadena en UTF-8 y la misma cadena en ISO-8859-1 pueden diferir con caracteres acentuados. Siempre aclara la codificación de caracteres antes de codificar texto en Base64.

Usando Base64 en diferentes lenguajes

JavaScript (navegador)

// Codificar
const encoded = btoa("Hello World");  // "SGVsbG8gV29ybGQ="

// Decodificar
const decoded = atob("SGVsbG8gV29ybGQ=");  // "Hello World"

Nota: btoa y atob solo funcionan con cadenas ASCII. Para texto Unicode, codifica primero como UTF-8:

// Codificar texto Unicode
const encoded = btoa(unescape(encodeURIComponent("Hola Mundo")));

// Decodificar
const decoded = decodeURIComponent(escape(atob(encoded)));

Python

import base64

# Codificar
encoded = base64.b64encode(b"Hello World").decode()  # "SGVsbG8gV29ybGQ="

# Decodificar
decoded = base64.b64decode("SGVsbG8gV29ybGQ=").decode()  # "Hello World"

# Variante Base64URL
url_encoded = base64.urlsafe_b64encode(b"Hello World").decode()

Línea de comandos

# Codificar
echo -n "Hello World" | base64
# SGVsbG8gV29ybGQ=

# Decodificar
echo "SGVsbG8gV29ybGQ=" | base64 --decode
# Hello World

El indicador -n en echo es importante. Sin él, el carácter de nueva línea también se codifica, produciendo un resultado diferente.

Consideraciones de rendimiento

La codificación y decodificación Base64 son operaciones rápidas, pero el tamaño importa en situaciones sensibles al rendimiento:

  • Transferencias de archivos grandes: La sobrecarga del 33% se acumula. Un archivo de 10 MB llega a unos 13,3 MB después de la codificación. Si transfieres archivos con frecuencia, usa protocolos binarios o cargas multipart.
  • Imágenes CSS en línea: Las imágenes codificadas en Base64 incrustadas en una hoja de estilos se vuelven a descargar en cada carga de página. Está bien para íconos de menos de 2 KB, pero para imágenes más grandes debería ser un archivo separado para que el navegador pueda cachearlas.
  • Almacenamiento en base de datos: Almacenar Base64 en una columna de texto funciona, pero usa un 33% más de espacio que almacenar bytes sin procesar en una columna binaria/blob. A escala, ese costo de almacenamiento es significativo.

Cuándo NO usar Base64

  • Cifrar datos sensibles — no proporciona ninguna seguridad
  • Archivos grandes como URIs de datos — la sobrecarga de tamaño y la falta de caché perjudican el rendimiento
  • Cuando el transporte binario está disponible — si el protocolo admite nativamente datos binarios (HTTP multipart, gRPC, WebSocket en modo binario), no hay razón para agregar la sobrecarga Base64
  • Almacenar archivos grandes en una base de datos — usa columnas blob o binarias en su lugar

Pruébalo ahora

Usa el codificador/decodificador Base64 gratuito para codificar o decodificar cadenas Base64 al instante. Todo el procesamiento ocurre en tu navegador — tus datos nunca salen de tu dispositivo.

Preguntas Frecuentes

D

Sobre el autor

Daniel Park

Senior frontend engineer based in Seoul. Seven years of experience building web applications at Korean SaaS companies, with a focus on developer tooling, web performance, and privacy-first architecture. Open-source contributor to the JavaScript ecosystem and founder of ToolPal.

Saber más

Compartir

XLinkedIn

Publicaciones relacionadas