Enviar um arquivo
  1. base64hub
  2. Outras bases
  3. Z85

Codificador e decodificador Z85 (ZeroMQ)

Cole bytes em hex para obter Z85, a variante de Base85 que o ZeroMQ usa para chaves CurveZMQ. A entrada precisa ser múltipla de 4 bytes, como a especificação exige, a menos que você permita um último bloco parcial.

Grátis sem cadastro, sem limites Local nada é enviado Fiel à especificação passa nos vetores de teste da RFC 32 do ZeroMQ Atualizado 27 de out. de 2026
Entrada 0Bytes 0 BSaída 0

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

Como codificar e decodificar Z85

  1. Cole os bytes em hex em Entrada · Hex. Espaços, dois-pontos e prefixos 0x são aceitos, então um dump hex pode ser colado como está.
  2. Leia o Z85 em Saída · Z85 (ZeroMQ).
  3. Se a quantidade de bytes não for múltipla de 4, aparece um erro que informa a quantidade. Marque Permitir último bloco parcial (fora do padrão) só se os dois lados concordarem com essa extensão.
  4. Para decodificar, clique em Z85 (ZeroMQ) → Hex no seletor de direção e cole a string Z85. Ajuste Para em Base64 ou Texto para outras visualizações, ou use Salvar bytes para um arquivo binário.

Os vetores de teste da especificação

A especificação Z85 do ZeroMQ (RFC 32 na série de RFCs do ZeroMQ) traz dois valores de teste. Esta ferramenta reproduz os dois:

HexZ85
86 4F D2 6F B5 59 F7 5BHelloWorld
8E 0B DD 69 76 28 B9 1D 8F 24 55 87 EE 95 C5 B0 4D 48 96 3F 79 25 98 77 B4 9C D9 06 3A EA D3 B7JTKVSB%%)wK0E.X)V>+}o?pNmC{O&4W4b!Ni{Lh6

O primeiro mostra a estrutura de blocos: 8 bytes, dois blocos, dez caracteres. O segundo é uma chave de 32 bytes e a sua codificação de 40 caracteres, o tamanho que você vê em configurações do CurveZMQ.

Alguns valores extremos: quatro bytes zero são 00000, e quatro bytes ff são %nSc0. O Z85 não tem atalho para blocos de zeros, então uma sequência de zeros continua ocupando cinco caracteres por bloco.

Por que o ZeroMQ usa Z85

Chaves CurveZMQ são 32 bytes aleatórios. O ZeroMQ precisava de um jeito de colocá-las em arquivos de configuração, linhas de comando e código-fonte como strings simples. O Z85 foi criado para isso:

  • Ele é 25% maior que os bytes brutos, contra 33% do Base64, então uma chave de 32 bytes tem 40 caracteres em vez de 44.
  • O alfabeto não tem ", ', \ nem crase, então uma chave pode entrar em um literal de string em C, Python ou shell sem escape. Ele também evita , e ;.
  • Dígitos e letras vêm primeiro (0-9 a-z A-Z), seguidos de 23 caracteres de pontuação: .-:+=^!/*?&<>()[]{}@%$#.

Ele ainda contém <, > e &, então Z85 dentro de XML ou HTML precisa de escape. Em JSON, não precisa de nenhum.

Z85 em Python

O Z85 e o b85encode do Python compartilham a aritmética e só diferem no alfabeto, então uma tradução de caracteres converte um no outro:

import base64

B85 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~"
Z85 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"
TO_Z85 = str.maketrans(B85, Z85)
FROM_Z85 = str.maketrans(Z85, B85)

def z85encode(data: bytes) -> str:
    if len(data) % 4:
        raise ValueError("Z85 needs a multiple of 4 bytes")
    return base64.b85encode(data).decode().translate(TO_Z85)

def z85decode(text: str) -> bytes:
    return base64.b85decode(text.translate(FROM_Z85))

z85encode(bytes.fromhex("864FD26FB559F75B"))   # 'HelloWorld'

Se você já depende do PyZMQ, zmq.utils.z85.encode e decode fazem o mesmo. Em C, a libzmq tem zmq_z85_encode e zmq_z85_decode. Mais sobre manipulação de bytes em Python na página de Python.

Problemas comuns

  • “O Z85 codifica blocos de 4 bytes e os dados têm N bytes”. A entrada não está alinhada em blocos. Confira se você copiou a chave inteira; uma chave de 32 bytes que aparece com 31 perdeu um par de dígitos hex.
  • “O Z85 precisa de grupos de 5 caracteres; sobraram N”. A string Z85 foi cortada ou tem caracteres a mais. Uma chave CurveZMQ precisa ter exatamente 40 caracteres.
  • A string decodifica, mas a chave não funciona. Ela pode ser Ascii85 ou Base85 do Git, que seguem as mesmas regras de comprimento, mas não o mesmo alfabeto, então os mesmos caracteres decodificam para bytes diferentes. Teste na página de Base85 com De em outra variante.

Perguntas frequentes

Por que o Z85 exige um múltiplo de 4 bytes?

A especificação só define o Z85 para blocos inteiros de 4 bytes, então um decodificador pode contar com cada 5 caracteres valendo 4 bytes. Dados de outro comprimento precisam ser completados ou delimitados pela aplicação. Marque Permitir último bloco parcial (fora do padrão) para codificar o final no estilo Ascii85 mesmo assim.

Qual o comprimento de uma chave CurveZMQ em Z85?

40 caracteres. Chaves pública e secreta do CurveZMQ têm 32 bytes, e 32 / 4 × 5 = 40. É o comprimento que zmq_curve_keypair() retorna, mais um terminador nulo em C.

Z85 é a mesma coisa que Ascii85?

Mesma aritmética, alfabeto diferente. Os dois escrevem 4 bytes como 5 dígitos em base 85, mas o Z85 coloca dígitos e letras primeiro e evita aspas e barras invertidas, e não tem o atalho z nem os delimitadores <~ ~>.

Como codificar Z85 em Python?

A biblioteca padrão não tem Z85, mas o base64.b85encode usa a mesma aritmética, então traduzir o alfabeto da saída dele gera Z85. O snippet desta página faz isso. O PyZMQ também traz zmq.utils.z85.