Como usar
- Escolha Codificar para transformar texto ou bytes em Z85, ou Decodificar para transformar Z85 de volta em dados.
- Para chaves e outros valores binários, defina a entrada como Hex ao codificar, ou a saída como Hex ao decodificar.
- Digite, cole ou abra um arquivo. O resultado é atualizado enquanto você digita.
- Copie o resultado ou baixe-o como arquivo.
O que é Z85?
O Z85 é especificado na RFC 32 do ZeroMQ (uma especificação da comunidade ZeroMQ, não uma RFC da IETF). Como outras codificações Base85, ele transforma cada grupo de 4 bytes em 5 caracteres: lê cada grupo como um número de 32 bits big-endian e o escreve como 5 dígitos na base 85, começando pelo mais significativo. A saída é 25% maior que a entrada.
O que diferencia o Z85 é o alfabeto: 0-9, a-z, A-Z e os 23 símbolos .-:+=^!/*?&<>()[]{}@%$#. Ele deixa de fora os dois tipos de aspas, a barra invertida, o acento grave, a vírgula, o ponto e vírgula, a barra vertical, o til e o sublinhado. O alfabeto foi pensado para ser seguro em strings no código-fonte, então um valor Z85 pode ser colado entre aspas em C, Python ou JSON sem nenhum escape.
Onde o Z85 é usado
O ZeroMQ usa o Z85 para exibir chaves CurveZMQ. Uma chave pública ou secreta de 32 bytes vira uma string Z85 de 40 caracteres, que é a forma retornada por zmq_curve_keypair() e aceita pelas opções de socket da segurança CURVE. A biblioteca também expõe zmq_z85_encode() e zmq_z85_decode(), e bindings como o pyzmq oferecem as mesmas funções.
// C (libzmq)
char text[41]; // 32 bytes -> 40 caracteres + NUL
zmq_z85_encode(text, key, 32);
# Python (pyzmq)
from zmq.utils import z85
z85.encode(bytes.fromhex('864fd26fb559f75b')) # b'HelloWorld'
A última linha é o vetor de teste da especificação.
Comprimento da entrada: uma observação sobre esta ferramenta
A RFC 32 exige que a entrada binária tenha um múltiplo de 4 bytes e que a string codificada tenha um múltiplo de 5 caracteres. Ela não define preenchimento, e implementações estritas como zmq_z85_encode() recusam outros comprimentos.
Esta ferramenta também aceita outros comprimentos, usando a mesma regra do Ascii85 e do Base85: um grupo final de n bytes vira n + 1 caracteres. Trata-se de uma extensão fora do padrão. A saída gerada assim pode ser rejeitada por outros decodificadores Z85, então complete seus dados até um múltiplo de 4 bytes quando precisar de compatibilidade. As chaves CurveZMQ têm 32 bytes e sempre se encaixam nessa regra.
Especificação
| Alfabeto | 0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$# |
|---|---|
| Tamanho da saída | 5 caracteres a cada 4 bytes (125%) |
| Preenchimento | Nenhum |
| Padrão | ZeroMQ RFC 32 |
| Diferencia maiúsculas e minúsculas | Sim |
Exemplos
| Entrada (UTF-8) | Saída |
|---|---|
Hello, World! | nm=QNz.92jz/PV8aP |
Base64.is | lsB}Dhz^42A@ |
你好 | <H}kFRm= |
Perguntas frequentes
Qual é a diferença entre Z85 e Ascii85?
! a u, que inclui aspas e a barra invertida, e tem o atalho z para bytes zero. O Z85 evita caracteres que precisam de escape em strings e não tem atalho.O Z85 usa preenchimento?
Não. A especificação só permite entradas com comprimento múltiplo de 4 bytes. Esta ferramenta codifica outros comprimentos com um grupo final mais curto, o que não faz parte do padrão.
Posso usar Z85 em JSON, XML ou URLs?
Qual é o comprimento de uma chave CurveZMQ codificada em Z85?
Uma chave CurveZMQ tem 32 bytes, então vira exatamente 40 caracteres. Para ver a chave bruta, decodifique-a aqui com a saída Hex.