Subir un archivo
  1. base64hub
  2. Herramientas web y de tokens
  3. zlib + Base64

Compresión zlib y deflate a Base64

Comprime un texto o un archivo con zlib (RFC 1950) o raw deflate (RFC 1951) y copia el Base64. Elige el envoltorio que espera el código receptor y el error “incorrect header check” desaparece.

Gratis sin registro, sin límites Local no se sube nada 3 envoltorios zlib, raw deflate y gzip a partir de una entrada Actualizado 27 oct 2026
Entrada –Comprimido –Salida –Proporción –

Se procesa en tu navegador. Esta página no puede enviar tus datos a ninguna parte – cómo lo sabemos

Cómo comprimir con zlib y codificar en Base64

  1. Escribe o pega el texto, o suelta un archivo.
  2. Formato empieza en zlib (deflate). Cambia a Deflate sin procesar cuando el receptor quiera el flujo sin envoltorio, o a gzip.
  3. Si quieres, marca URL-safe (- _) o Ajustar a 76.
  4. Copiar salida, o descarga el Base64 como .txt o el archivo binario .zz / .deflate.

Intercambiar envía la salida al lado Descomprimir para confirmar el viaje de ida y vuelta.

El mismo texto en tres envoltorios

Hello, world! (13 bytes), comprimido con el nivel por defecto:

FormatoBytesBase64
raw deflate1580jNycnXUSjPL8pJUQQA
zlib21eJzzSM3JyddRKM8vyklRBAAgXgSK
gzip33H4sIAAAAAAAAA/NIzcnJ11Eozy/KSVEEAObG5usNAAAA

El flujo deflate son los mismos 15 bytes en los tres, pero el Base64 se ve distinto porque los encabezados de 2 y 10 bytes desplazan la posición de cada byte dentro de los grupos de 3 bytes. El encabezado de zlib es 78 9C con el nivel por defecto, y por eso el Base64 de zlib empieza por eJ. Con el nivel 9 es 78 DA, en Base64 eN.

Qué llamada produce cada formato

La mayoría de los fallos con «deflate» vienen de que dos partes usan la misma palabra para envoltorios distintos:

Lenguajezlib (RFC 1950)raw deflate (RFC 1951)gzip
Pythonzlib.compress()zlib.compressobj(wbits=-15)gzip.compress()
Node.jszlib.deflateSync()zlib.deflateRawSync()zlib.gzipSync()
NavegadorCompressionStream("deflate")CompressionStream("deflate-raw")CompressionStream("gzip")
PHPgzcompress()gzdeflate()gzencode()
Javanew Deflater()new Deflater(level, true)GZIPOutputStream
.NETZLibStream (.NET 6+)DeflateStreamGZipStream
Gocompress/zlibcompress/flatecompress/gzip

Ojo con las trampas: DeflateStream de .NET y compress/flate de Go son raw, mientras que el «deflate» de Node y del navegador es zlib. Un servicio en C# y un cliente en Node que «usan deflate» los dos no se entenderán sin un cambio en uno de los lados.

Dónde aparece cada envoltorio

  • zlib: flujos FlateDecode de PDF, datos de imagen PNG, objetos de Git, muchos protocolos binarios y formatos de partidas guardadas de juegos.
  • raw deflate: el binding HTTP-Redirect de SAML (el decodificador SAML se encarga de él), las entradas dentro de los archivos ZIP, permessage-deflate de WebSocket.
  • gzip: archivos, HTTP, logs. La página de gzip lo cubre.

Zlib + Base64 en código

import base64, zlib

packed = base64.b64encode(zlib.compress(b"Hello, world!")).decode()
# 'eJzzSM3JyddRKM8vyklRBAAgXgSK'
text = zlib.decompress(base64.b64decode(packed))
// Node.js: raw deflate for a SAML-style payload
const zlib = require("zlib");
const packed = zlib.deflateRawSync(Buffer.from("Hello, world!")).toString("base64");
// '80jNycnXUSjPL8pJUQQA'

Para volver a leer esas cadenas, usa el decodificador Base64 de gzip y zlib, que detecta los tres envoltorios. Más en Python y Node.js.

Problemas habituales

  • incorrect header check: decodificador zlib con datos raw o gzip. Haz coincidir el envoltorio.
  • invalid stored block lengths o invalid block type: decodificador raw deflate con datos zlib; los dos bytes del encabezado se leen como bloques deflate.
  • El resultado es más largo que la entrada: las cadenas cortas no se comprimen. Por debajo de unos 50–100 bytes, el Base64 simple es más corto.
  • La salida no coincide byte a byte con la de otra herramienta: el nivel de compresión y la biblioteca cambian los bytes, y cualquier descompresor correcto devuelve el mismo original en ambos casos.

Preguntas frecuentes

¿Qué diferencia hay entre zlib y deflate?

Deflate es el algoritmo de compresión. Raw deflate es el flujo comprimido sin más; zlib le añade un encabezado de 2 bytes y una suma de comprobación Adler-32 de 4 bytes alrededor; gzip añade un encabezado de 10 bytes y un final de 8 bytes con CRC-32. Los datos comprimidos del medio son idénticos.

¿Qué provoca el error 'incorrect header check'?

El descompresor esperaba un encabezado zlib y recibió otra cosa, casi siempre raw deflate o gzip. Usa la llamada correspondiente (zlib.decompress(data, -15) en Python para raw deflate) o vuelve a codificar con el formato que espera el receptor.

¿Content-Encoding: deflate de HTTP es raw deflate o zlib?

La especificación HTTP dice zlib. Algunos servidores antiguos enviaban raw deflate con ese nombre, y por eso gzip es la opción más segura para HTTP.