Slik bruker du verktøyet
- Velg Kode for å gjøre tekst eller byte om til Z85, eller Dekode for å gjøre Z85 om til data igjen.
- For nøkler og andre binære verdier setter du inndata til Hex ved koding, eller utdata til Hex ved dekoding.
- Skriv, lim inn eller åpne en fil. Resultatet oppdateres mens du skriver.
- Kopier resultatet eller last det ned som en fil.
Hva er Z85?
Z85 er spesifisert i ZeroMQ RFC 32 (en spesifikasjon fra ZeroMQ-fellesskapet, ikke en RFC fra IETF). Som andre Base85-kodinger gjør den hver gruppe på 4 byte om til 5 tegn: Hver gruppe leses som et 32-biters big-endian-tall og skrives som 5 base-85-sifre, med det mest signifikante sifferet først. Utdataene er 25 % større enn inndataene.
Det som skiller Z85 fra de andre, er alfabetet: 0-9, a-z, A-Z og de 23 symbolene .-:+=^!/*?&<>()[]{}@%$#. Det utelater begge typer anførselstegn, omvendt skråstrek, backtick, komma, semikolon, loddrett strek, tilde og understrek. Alfabetet ble utformet for å være trygt i strenger i kildekode, så en Z85-verdi kan limes inn mellom anførselstegn i C, Python eller JSON uten noen form for escaping.
Hvor Z85 brukes
ZeroMQ bruker Z85 til å skrive ut CurveZMQ-nøkler. En offentlig eller hemmelig nøkkel på 32 byte blir en Z85-streng på 40 tegn. Det er denne formen zmq_curve_keypair() returnerer, og som socket-valgene for CURVE-sikkerhet godtar. Biblioteket har også zmq_z85_encode() og zmq_z85_decode(), og bindinger som pyzmq tilbyr de samme funksjonene.
// C (libzmq)
char text[41]; // 32 byte -> 40 tegn + NUL
zmq_z85_encode(text, key, 32);
# Python (pyzmq)
from zmq.utils import z85
z85.encode(bytes.fromhex('864fd26fb559f75b')) # b'HelloWorld'
Den siste linjen er testvektoren fra spesifikasjonen.
Inndatalengde: en merknad om dette verktøyet
RFC 32 krever at de binære inndataene er et multiplum av 4 byte, og at den kodede strengen er et multiplum av 5 tegn. Den definerer ingen utfylling, og strenge implementasjoner som zmq_z85_encode() avviser andre lengder.
Dette verktøyet godtar også andre lengder og bruker samme regel som Ascii85 og Base85: En siste gruppe på n byte blir n + 1 tegn. Dette er en utvidelse som ikke følger standarden. Utdata som lages på denne måten, kan bli avvist av andre Z85-dekodere, så fyll ut dataene til et multiplum av 4 byte når du trenger kompatibilitet. CurveZMQ-nøkler er på 32 byte og passer alltid.
Spesifikasjon
| Alfabet | 0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$# |
|---|---|
| Utdatastørrelse | 5 tegn per 4 byte (125 %) |
| Utfylling | Ingen |
| Standard | ZeroMQ RFC 32 |
| Skiller store og små bokstaver | Ja |
Eksempler
| Inndata (UTF-8) | Utdata |
|---|---|
Hello, World! | nm=QNz.92jz/PV8aP |
Base64.is | lsB}Dhz^42A@ |
你好 | <H}kFRm= |
Ofte stilte spørsmål
Hva er forskjellen mellom Z85 og Ascii85?
! til u, som inkluderer anførselstegn og omvendt skråstrek, og har forkortelsen z for nullbyte. Z85 unngår tegn som må escapes i strenger, og har ingen forkortelse.Bruker Z85 utfylling?
Nei. Spesifikasjonen tillater bare inndatalengder som er et multiplum av 4 byte. Dette verktøyet koder andre lengder med en kortere siste gruppe, noe som ikke er en del av standarden.
Kan jeg bruke Z85 i JSON, XML eller URL-er?
Hvor lang er en Z85-kodet CurveZMQ-nøkkel?
En CurveZMQ-nøkkel er på 32 byte, så den kodes til nøyaktig 40 tegn. For å se den rå nøkkelen kan du dekode den her med Hex som utdata.