design
Explicación de Base64: Cuándo y por qué lo usan los desarrolladores (y sus trampas)
Qué hace Base64 (3 bytes a 4 caracteres ASCII, +33% de tamaño), los casos de uso reales (data URIs, JWT, Basic auth), y las trampas: no es cifrado ni compresión.
Published 2026-06-11 · 8 min read
Affiliate disclosure
Some links below are affiliate links. I may earn a commission from qualifying purchases at no extra cost to you. I only recommend tools I have used or tested.

TL;DR
- Base64 es una codificación, no un cifrado ni una compresión. Reescribe bytes arbitrarios usando solo 64 caracteres ASCII imprimibles para que los datos binarios puedan viajar por canales de solo texto.
- La mecánica: cada 3 bytes se convierten en 4 caracteres (6 bits cada uno), rellenados con
=, razón por la cual la salida es aproximadamente +33% más grande que la entrada (RFC 4648, MDN).- Usos reales: data URIs (imágenes inline en CSS/HTML), adjuntos MIME en correos, binarios dentro de JSON/XML, encabezados HTTP Basic auth y segmentos JWT (que usan Base64URL).
- Las trampas: Base64 es completamente reversible (nunca es una capa de seguridad), el impuesto del +33% lo hace incorrecto para archivos grandes en la red, y
btoa()falla con caracteres que no son ASCII porque maneja Latin-1, no UTF-8.- Puedes codificar/decodificar ambas variantes en la herramienta AnyTools Base64; se ejecuta en tu navegador y nada sale de tu dispositivo.
Lo ves por todas partes, ¿pero qué es exactamente?
Ves una larga cadena de letras, números y un par de signos = al final (en un JWT, un archivo de configuración, una URL con data:, un encabezado de autenticación copiado) y tu cerebro automáticamente piensa: "Ah, Base64". Pero, ¿para qué sirve realmente y por qué está en todas partes?
Respuesta corta: Base64 reescribe datos binarios arbitrarios usando solo 64 caracteres ASCII seguros e imprimibles, para que los bytes puedan viajar a través de canales que solo aceptan texto sin corromperse. No es un código secreto. No es un compresor. Es un disfraz de transporte. Esta guía es la versión de desarrollador a desarrollador: la mecánica exacta, dónde brilla y dónde la gente la usa mal.
¿Qué hace realmente Base64?
Base64 está definido por el RFC 4648. Su alfabeto consta de 64 caracteres: A–Z, a–z, 0–9, además de + y /. Un carácter 65, =, se usa únicamente para relleno.
La transformación es puramente mecánica. Según el RFC 4648 §4, el codificador toma la entrada en grupos de 24 bits (3 bytes × 8 bits) y emite 4 caracteres, cada uno representando 6 bits. Esa proporción de 3 a 4 es toda la historia, y tiene una consecuencia inevitable que MDN deja claro: la forma codificada es aproximadamente un tercio más grande que la original; alrededor de un +33%, la famosa relación 4/3. Si la longitud de tu entrada no es un múltiplo exacto de 3, el último grupo se rellena para que la salida sea un múltiplo de 4. Por eso algunas cadenas terminan en uno o dos =.
Un ejemplo práctico, que puedes reproducir en la herramienta Base64:
"Hi" → 2 bytes → "SGk=" (le falta un byte para completar el grupo → un "=")
"Hello, World!" → 13 bytes → "SGVsbG8sIFdvcmxkIQ=="
De esta mecánica se derivan dos cosas que son más importantes que las matemáticas:
- Es completamente reversible y sin clave. Decodificar es simplemente usar la misma tabla al revés. No hay ningún secreto involucrado, lo cual es el origen del mayor mito que veremos más abajo.
- Te cuesta tamaño, no seguridad. Pagas un ~33% para ganar seguridad en el texto: genial para un token de 200 bytes, un desastre para un archivo de 10 MB.
También hay una variante que vale la pena conocer: Base64URL (RFC 4648 §5). Misma codificación, pero cambia + por - y / por _, y generalmente elimina el relleno =, para que el resultado sea seguro dentro de URLs, nombres de archivo y segmentos JWT.
¿Dónde brilla realmente Base64?
Cada uso legítimo de Base64 tiene la misma forma: datos binarios que necesitan vivir dentro de algo que solo acepta texto. Aquí es donde eso pasa en la práctica.
- Data URIs. Pones un pequeño icono directamente en CSS o HTML:
background: url("data:image/svg+xml;base64,PHN2Zy…"). Los bytes de la imagen se convierten en parte del texto de la hoja de estilos, ahorrando una petición HTTP; solo vale la pena para recursos menores de ~1–2 KB, porque el impuesto del +33% viaja en cada página que cargue ese CSS. - Adjuntos de correo (MIME). Esta es la razón por la que existe Base64. El transporte de correo electrónico se construyó para texto de 7 bits, así que los archivos binarios se envuelven en Base64 para llegar intactos.
- Binarios dentro de JSON / XML. JSON no tiene un tipo binario nativo. Para poner un pequeño blob (una miniatura, una firma, un certificado) en un campo JSON, lo pasas por Base64 para obtener una cadena que el parser pueda manejar.
- HTTP Basic auth. El encabezado
Authorization: Basic …es literalmenteusuario:contraseñacodificado en Base64. Ten en cuenta que digo codificado: la autenticación Basic ofrece cero confidencialidad por sí misma y depende enteramente de HTTPS. El Base64 aquí es solo formato, no protección. - Segmentos JWT. Un JSON Web Token es
header.payload.signature, y cada parte es JSON codificado en Base64URL. Puedes pegar el segmento del medio en un decodificador y leer cada claim, por lo que jamás debes poner secretos en el payload de un JWT.
Para los casos ligados a URLs, Base64 a menudo se junta con una codificación diferente. Si estás ensamblando a mano una URL que ya lleva un valor en Base64, los caracteres +, / y = todavía necesitan adaptarse para ser seguros: usa Base64URL desde el principio, o pasa la URL por codificación porcentual (%-encoding) para que esos caracteres sobrevivan en la cadena de consulta. Y cuando necesites un identificador de texto único en lugar de bytes codificados, un generador de UUID es la herramienta correcta; los UUID son identificadores, no una forma de codificar datos.
¿Cuándo NO deberías usar Base64?
Esta es la sección decisiva. Base64 se usa en exceso de tres maneras, y cada una es un error esperando a pasar.
1. Es codificación, no cifrado, así que nunca lo uses para seguridad. Este es el pecado capital. Base64 no tiene clave; es reversible por cualquier persona en un solo paso. Una contraseña, una clave de API o un token "guardados como Base64" están guardados en texto plano; la codificación solo cambia qué caracteres se muestran, como señala MDN. Si necesitas confidencialidad, encripta. Si necesitas guardar credenciales, hashealos con bcrypt, scrypt o argon2.
2. Es la herramienta incorrecta para archivos grandes en la red. Debido al costo fijo de +33% en el tamaño, poner una imagen grande en Base64 dentro de tu código o enviar un archivo de varios megabytes como una cadena JSON desperdicia ancho de banda y obliga a que todo se decodifique en memoria de golpe. Para cualquier cosa más allá de recursos pequeños, envía el binario de forma nativa (una subida real vía multipart/form-data, o un cuerpo HTTP binario) y referéncialo por URL. Las data URIs inline son para recursos del tamaño de un favicon, no para la imagen principal de tu sitio.
3. No es compresión. Base64 hace que los datos sean más grandes, nunca más pequeños. Para reducir el tamaño de un payload, lo que quieres es gzip/brotli. A veces la gente codifica un blob en Base64 "para hacerlo portátil" y sin querer lo infla.
Aquí tienes una tabla de decisión rápida.
| Situación | ¿Usar Base64? | Por qué |
|---|---|---|
| Icono incrustado en CSS/HTML, menor a ~1–2 KB | ✅ Sí | Ahorra una petición HTTP; el +33% es insignificante a ese tamaño |
| Recurso mayor a unos pocos KB | 🚫 No | Un +33% incrustado en cada página supera el ahorro de la petición; usa una solicitud de archivo normal |
| Blob binario en un campo JSON/XML | ✅ Sí | JSON no tiene tipo binario; el texto es la única opción |
| Valor que irá en una URL o JWT | ✅ Sí — Base64URL | + / = no son seguros en URLs; el alfabeto URL-safe lo soluciona |
| Guardar una contraseña o API key | 🚫 No | Es reversible; eso es texto plano. Hashea o encripta en su lugar |
| Enviar una imagen de 5 MB a un servidor | 🚫 No | Impuesto del +33%; usa una subida binaria real y una URL |
| Intentar reducir el tamaño de un payload | 🚫 No | Base64 aumenta los datos; usa gzip/brotli |
Y una referencia rápida sobre las codificaciones que suelen confundirse entre sí:
| Codificación | Alfabeto / forma | Diseñada para |
|---|---|---|
| Base64 | A–Z a–z 0–9 + /, relleno = | Binario → texto ASCII (correo, JSON, data URIs) |
| Base64URL | +→-, /→_, sin relleno | Binario → texto seguro en URLs / nombres de archivo / JWT |
| Codificación URL (%-encoding) | %XX para caracteres inseguros | Hacer que el texto sea seguro dentro de una URL; es un problema diferente |
| Hex | 0–9 a–f, 2 caracteres/byte | Bytes legibles por humanos; +100% de tamaño, más simple que Base64 |
¿Cómo codificar y decodificar correctamente?
Puedes hacer esto en tu navegador sin instalar nada.
- Abre la herramienta AnyTools Base64. Se ejecuta completamente del lado del cliente; tu entrada nunca sale de tu dispositivo.
- Codificar: pega texto o bytes, obtén la cadena Base64. Activa la opción URL-safe si el valor irá a una URL, nombre de archivo o JWT; obtendrás
-/_y sin relleno=. - Decodificar: pega una cadena Base64 (o Base64URL) para recuperar el original. La herramienta detecta automáticamente la variante, así que no necesitas saber cuál te dieron.
- Caracteres que no son ASCII funcionan sin problemas. La herramienta codifica en UTF-8 primero, así que emojis, letras acentuadas del español y árabe viajan perfectamente; nada de esos errores
InvalidCharacterErrordebtoa()que aparecerían al usar世界o🌏.
Si en cambio estás haciendo esto en tu código, ten en cuenta que las funciones nativas del navegador btoa()/atob() manejan Latin-1, no UTF-8, así que debes envolverlas con TextEncoder/TextDecoder para cualquier cosa fuera del ASCII básico, según MDN.
El veredicto honesto
Base64 es una de las herramientas más útiles y aburridas en el stack de un desarrollador, y casi todos sus problemas surgen al olvidar qué es en realidad. Es una codificación de transporte: convierte bytes arbitrarios en 64 caracteres ASCII seguros con un costo fijo de +33% de tamaño, lo que permite que los binarios viajen por canales de solo texto como correos, JSON, URLs y encabezados. Úsalo para data URIs, MIME, blobs en JSON, Basic auth y JWT (su variante URL-safe). No lo uses como medida de seguridad (no tiene clave y es reversible), para archivos grandes en la red (el impuesto de tamaño te pasará factura) ni como compresión (hace que los datos crezcan, no que se encojan).
Guarda esta frase en tu mente: es una codificación de transporte, no una bóveda de seguridad ni un archivo zip, y lo usarás correctamente siempre. Acude a la herramienta Base64 cuando necesites leer un claim de un JWT, incrustar un icono de menos de 2 KB o revisar un valor codificado; y opta por una subida binaria real (multipart/form-data) en el momento en que tu archivo pese más de unos pocos KB. Se ejecuta en tu navegador, soporta ambas variantes, y el texto que pegues jamás se envía a ningún servidor.
Divulgación: este artículo puede contener enlaces de afiliados; anytools puede ganar una comisión sin costo alguno para ti.
Sources
- IETF: RFC 4648 — The Base16, Base32, and Base64 Data Encodings
- IETF: RFC 4648 §5 — Base64 URL- and filename-safe alphabet
- MDN: Base64 (Glossary) — encoding, 6 bits per digit, ~33% size increase
- MDN: Window.btoa() — Base64 encoding in the browser
- MDN: Window.atob() — Base64 decoding in the browser
- IETF: RFC 7519 — JSON Web Token (JWT), Base64URL-encoded segments





