Enviar um arquivo
  1. base64hub
  2. Web e tokens
  3. zlib + Base64

Compressão zlib e deflate para Base64

Compacte um texto ou arquivo com zlib (RFC 1950) ou deflate bruto (RFC 1951) e copie o Base64. Escolha o envelope que o código do destino espera, e o “incorrect header check” desaparece.

Grátis sem cadastro, sem limites Local nada é enviado 3 envelopes zlib, deflate bruto e gzip a partir da mesma entrada Atualizado 27 de out. de 2026
Entrada –Compactado –Saída –Taxa –

Processado no seu navegador. Esta página não consegue enviar seus dados para lugar nenhum – como sabemos

Como compactar com zlib e codificar em Base64

  1. Digite ou cole o texto, ou arraste um arquivo.
  2. Formato começa em zlib (deflate). Mude para Deflate bruto quando o destino quiser o stream puro, ou para gzip.
  3. Se quiser, marque URL-safe (- _) ou Quebrar em 76.
  4. Use Copiar saída, ou baixe o .txt com o Base64 ou o arquivo binário .zz / .deflate.

Inverter envia a saída para o lado Descompactar, para conferir a ida e volta.

O mesmo texto em três envelopes

Hello, world! (13 bytes), compactado no nível padrão:

FormatoBytesBase64
deflate bruto1580jNycnXUSjPL8pJUQQA
zlib21eJzzSM3JyddRKM8vyklRBAAgXgSK
gzip33H4sIAAAAAAAAA/NIzcnJ11Eozy/KSVEEAObG5usNAAAA

O stream deflate são os mesmos 15 bytes nos três, e mesmo assim o Base64 parece diferente, porque os cabeçalhos de 2 e 10 bytes deslocam a posição de cada byte nos grupos de 3 bytes. O cabeçalho do zlib é 78 9C no nível padrão, e é por isso que o Base64 de zlib começa com eJ. No nível 9 ele é 78 DA, Base64 eN.

Qual chamada gera qual formato

A maioria dos bugs de “deflate” vem de dois lados usando a mesma palavra para envelopes diferentes:

Linguagemzlib (RFC 1950)deflate bruto (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

Repare nas armadilhas: o DeflateStream do .NET e o compress/flate do Go são brutos, enquanto o “deflate” do Node e do navegador é zlib. Um serviço em C# e um cliente em Node que “usam deflate” não vão se entender sem uma mudança de um dos lados.

Onde cada envelope aparece

  • zlib: streams FlateDecode de PDF, dados de imagem PNG, objetos do Git, muitos protocolos binários e formatos de save de jogos.
  • deflate bruto: o binding HTTP-Redirect do SAML (o decodificador SAML cuida dele), entradas dentro de arquivos ZIP, permessage-deflate do WebSocket.
  • gzip: arquivos, HTTP, logs. A página de gzip trata dele.

Zlib + Base64 no 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 ler essas strings de volta, use o decodificador Base64 de gzip e zlib, que detecta os três envelopes. Mais em Python e Node.js.

Problemas comuns

  • incorrect header check: decodificador zlib recebendo dados brutos ou gzip. Use o envelope correspondente.
  • invalid stored block lengths ou invalid block type: decodificador de deflate bruto recebendo dados zlib; os dois bytes de cabeçalho são lidos como blocos deflate.
  • O resultado é maior que a entrada: strings curtas não comprimem. Abaixo de uns 50–100 bytes, o Base64 puro é mais curto.
  • A saída não bate byte a byte com a de outra ferramenta: o nível de compressão e a biblioteca mudam os bytes, e qualquer descompactador correto devolve o mesmo original a partir de qualquer uma das duas.

Perguntas frequentes

Qual é a diferença entre zlib e deflate?

Deflate é o algoritmo de compressão. O deflate bruto é o stream compactado puro; o zlib acrescenta um cabeçalho de 2 bytes e um checksum Adler-32 de 4 bytes ao redor dele; o gzip acrescenta um cabeçalho de 10 bytes e um trailer de 8 bytes com CRC-32. Os dados compactados no meio são idênticos.

O que causa 'incorrect header check'?

O descompactador esperava um cabeçalho zlib e recebeu outra coisa, na maioria das vezes deflate bruto ou gzip. Use a chamada correspondente (zlib.decompress(data, -15) no Python para deflate bruto) ou codifique de novo com o formato que o destino espera.

O Content-Encoding: deflate do HTTP é deflate bruto ou zlib?

A especificação do HTTP diz zlib. Alguns servidores antigos enviavam deflate bruto com esse nome, e é por isso que o gzip é a escolha mais segura para HTTP.