Guide
Por qué Base64 hace los archivos ~33% más grandes
No es un error ni una implementación ineficiente — la sobrecarga del 33% está incorporada en lo que hace Base64.
By Buğra SözeriPublished
Base64 no comprime nada — hace lo contrario. Existe para hacer que los datos binarios sean seguros de transportar por canales de solo texto (cuerpos de correo, cadenas JSON, XML, URLs) que nunca se diseñaron para manejar bytes crudos, y esa seguridad cuesta espacio: cada 3 bytes de entrada se convierten en 4 caracteres de salida, una proporción fija de 4:3 que resulta en aproximadamente 33% más grande que el original, independientemente de cuáles sean realmente los datos.
La matemática detrás del 33%
El alfabeto de Base64 tiene 64 símbolos (A-Z, a-z, 0-9, más dos caracteres más, típicamente + y /), y 64 = 2⁶, así que cada carácter de salida codifica exactamente 6 bits. Tres bytes de entrada son 24 bits, que se dividen equitativamente en cuatro grupos de 6 bits — de ahí que 3 bytes de entrada se conviertan en 4 caracteres de salida. Como cada carácter luego se almacena como un byte de texto, 3 bytes de datos binarios se convierten en 4 bytes de texto Base64: un multiplicador de 4/3 ≈ 1,333, o un aumento de tamaño del 33,3%. Esto no es específico de la implementación — se define así en el RFC 4648, el estándar IETF que sigue todo codificador Base64.
Relleno: el bit extra
| Longitud de entrada (bytes) | Longitud codificada | Relleno |
|---|---|---|
| Múltiplo de 3 (p. ej. 3, 6, 9…) | Proporción 4/3 exacta | Ninguno |
| Resto 1 (p. ej. 1, 4, 7…) | Redondea al siguiente grupo de 4 | == |
| Resto 2 (p. ej. 2, 5, 8…) | Redondea al siguiente grupo de 4 | = |
Cuando la longitud de entrada no es un múltiplo limpio de 3, el último grupo se rellena con uno o dos caracteres = para que la longitud total de salida se mantenga como múltiplo de 4 — algunos decodificadores requieren esto para analizar la cadena correctamente, aunque técnicamente es información redundante. En entradas pequeñas el relleno puede empujar la sobrecarga ligeramente por encima del 33%, pero el efecto se reduce hacia el 33,3% teórico a medida que la entrada crece.
Cuándo vale la pena pagar la sobrecarga
El costo del 33% compra compatibilidad: la salida de Base64 es ASCII plano, así que sobrevive al pegarse en una cadena JSON, un atributo XML, un parámetro de consulta de URL, o un cuerpo de correo sin corromperse — ninguno de los cuales puede contener con seguridad bytes binarios crudos. Ese es el intercambio detrás de incrustar imágenes pequeñas como URI de datos o adjuntar archivos a un correo. Para archivos genuinamente grandes, o donde ya existe un transporte seguro para binarios (un endpoint de subida de archivos, datos de formulario multipart, una API de almacenamiento de objetos), saltarse Base64 y enviar los bytes crudos evita la sobrecarga por completo — consulta la herramienta Base64 si necesitas verificar exactamente cuán grande se volverá un archivo dado antes de comprometerte a codificarlo.
Frequently asked questions
- ¿Por qué exactamente 33% más grande, no otro número?
- Base64 codifica 3 bytes (24 bits) de entrada como 4 caracteres de salida (6 bits cada uno, ya que el alfabeto tiene 64 símbolos). Esa es una proporción 4:3, o exactamente 33,3% más caracteres que bytes de entrada — y como cada carácter de salida se almacena como un byte en un archivo de texto, el archivo mismo crece cerca de un tercio.
- ¿Puedo evitar la sobrecarga del 33%?
- Solo no usando Base64 — la sobrecarga es inherente a representar datos binarios arbitrarios como texto ASCII imprimible. Si el tamaño importa más que evitar un transporte no seguro para binarios, envía el binario crudo directamente (p. ej. subidas de formulario multipart, o un cuerpo de API binario) en lugar de codificarlo a Base64.
- ¿La compresión gzip cancela la sobrecarga de Base64?
- Parcialmente. La salida de Base64 es bastante comprimible porque su alfabeto de 64 caracteres es pequeño y repetitivo comparado con binario aleatorio, así que gzip típicamente recupera algo pero no todo el terreno perdido — normalmente aún terminarás algo más grande que el binario crudo transferido solo con gzip.
- ¿Por qué la salida de Base64 a veces termina con signos = o ==?
- Eso es relleno. Base64 agrupa la entrada en bloques de 3 bytes; cuando la longitud de entrada no es múltiplo de 3, el último grupo se rellena con 1 o 2 caracteres «=» para mantener la longitud de salida como múltiplo de 4, lo cual algunos decodificadores requieren para analizar correctamente.
Sources & references
Authoritative references cited by this piece. Verified by Buğra Sözeri on the dates shown and re-checked at every deploy.
- RFC 4648 — The Base16, Base32, and Base64 Data Encodings — El estándar IETF que define el alfabeto Base64, el relleno, y la agrupación de 3 bytes a 4 caracteres(as of )
- MDN — Base64 encoding and decoding — Explicación de MDN sobre el propósito binario-a-texto de Base64 y su sobrecarga de tamaño(as of )
Related
Published September 25, 2026