Come si usa
- Scegli Codifica per trasformare testo o byte in Z85, oppure Decodifica per riportare Z85 ai dati originali.
- Per chiavi e altri valori binari, imposta Formato input su Esadecimale in codifica, oppure Formato output su Esadecimale in decodifica.
- Digita, incolla o apri un file. Il risultato si aggiorna mentre scrivi.
- Copia il risultato o scaricalo come file.
Che cos’è Z85?
Z85 è definito nella RFC 32 di ZeroMQ (una specifica della comunità ZeroMQ, non una RFC dell’IETF). Come le altre codifiche Base85, trasforma ogni gruppo di 4 byte in 5 caratteri: legge ciascun gruppo come un numero a 32 bit big-endian e lo scrive come 5 cifre in base 85, partendo dalla più significativa. L’output è il 25% più grande dell’input.
Ciò che distingue Z85 è il suo alfabeto: 0-9, a-z, A-Z e i 23 simboli .-:+=^!/*?&<>()[]{}@%$#. Esclude entrambi i tipi di virgolette, la barra rovesciata, l’accento grave, la virgola, il punto e virgola, la barra verticale, la tilde e il trattino basso. L’alfabeto è stato progettato per essere sicuro nelle stringhe del codice sorgente, quindi un valore Z85 si può incollare tra virgolette in C, Python o JSON senza alcun escape.
Dove si usa Z85
ZeroMQ usa Z85 per rappresentare in forma testuale le chiavi CurveZMQ. Una chiave pubblica o segreta di 32 byte diventa una stringa Z85 di 40 caratteri, che è la forma restituita da zmq_curve_keypair() e accettata dalle opzioni dei socket per la sicurezza CURVE. La libreria espone anche zmq_z85_encode() e zmq_z85_decode(), e binding come pyzmq offrono le stesse funzioni.
// C (libzmq)
char text[41]; // 32 byte -> 40 caratteri + NUL
zmq_z85_encode(text, key, 32);
# Python (pyzmq)
from zmq.utils import z85
z85.encode(bytes.fromhex('864fd26fb559f75b')) # b'HelloWorld'
L’ultima riga è il vettore di test della specifica.
Lunghezza dell’input: una nota su questo strumento
La RFC 32 richiede che l’input binario sia un multiplo di 4 byte e la stringa codificata un multiplo di 5 caratteri. Non definisce alcun padding, e le implementazioni rigorose come zmq_z85_encode() rifiutano le altre lunghezze.
Questo strumento accetta anche altre lunghezze, con la stessa regola di Ascii85 e Base85: un gruppo finale di n byte diventa n + 1 caratteri. Si tratta di un’estensione non standard. L’output prodotto in questo modo potrebbe essere rifiutato da altri decodificatori Z85, quindi, se ti serve la compatibilità, porta i dati a un multiplo di 4 byte. Le chiavi CurveZMQ sono di 32 byte e rientrano sempre nella regola.
Specifiche
| Alfabeto | 0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$# |
|---|---|
| Dimensione dell’output | 5 caratteri ogni 4 byte (125%) |
| Padding | Nessuno |
| Standard | ZeroMQ RFC 32 |
| Distingue maiuscole/minuscole | Sì |
Esempi
| Input (UTF-8) | Output |
|---|---|
Hello, World! | nm=QNz.92jz/PV8aP |
Base64.is | lsB}Dhz^42A@ |
你好 | <H}kFRm= |
Domande frequenti
Qual è la differenza tra Z85 e Ascii85?
! a u, che comprende le virgolette e la barra rovesciata, e ha la scorciatoia z per i byte zero. Z85 evita i caratteri che nelle stringhe richiedono escape e non ha scorciatoie.Z85 usa il padding?
No. La specifica ammette solo input di lunghezza multipla di 4 byte. Questo strumento codifica le altre lunghezze con un gruppo finale più corto, che non fa parte dello standard.
Posso usare Z85 in JSON, XML o negli URL?
Quanto è lunga una chiave CurveZMQ codificata in Z85?
Una chiave CurveZMQ è di 32 byte, quindi viene codificata in esattamente 40 caratteri. Per vedere la chiave grezza, decodificala qui con l’output Esadecimale.