Z85-koder og -dekoder

Konverter tekst, hex-byte eller filer til Z85 og tilbake. Z85 er Base85-varianten som er definert av ZeroMQ, med et alfabet som passer inn i strengliteraler i kildekode uten escaping.

Kjører helt i nettleseren din. Ingenting lastes opp.

Slik bruker du verktøyet

  1. Velg Kode for å gjøre tekst eller byte om til Z85, eller Dekode for å gjøre Z85 om til data igjen.
  2. For nøkler og andre binære verdier setter du inndata til Hex ved koding, eller utdata til Hex ved dekoding.
  3. Skriv, lim inn eller åpne en fil. Resultatet oppdateres mens du skriver.
  4. 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

Alfabet0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$#
Utdatastørrelse5 tegn per 4 byte (125 %)
UtfyllingIngen
StandardZeroMQ RFC 32
Skiller store og små bokstaverJa

Eksempler

Inndata (UTF-8)Utdata
Hello, World!nm=QNz.92jz/PV8aP
Base64.islsB}Dhz^42A@
你好<H}kFRm=

Ofte stilte spørsmål

Hva er forskjellen mellom Z85 og Ascii85?
Aritmetikken er den samme, alfabetene er det ikke. Ascii85 bruker ASCII-området fra ! 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?
I JSON-strenger, ja, uten escaping. I XML og HTML må <, > og & escapes. Til URL-er passer Z85 dårlig fordi ?, &, / og # har spesiell betydning; bruk heller Base64URL eller Base58.
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.