Z85-koder og -dekoder

Konvertér tekst, hexbytes eller filer til Z85 og tilbage. Z85 er den Base85-variant, som ZeroMQ har defineret, med et alfabet, der kan stå i strengliteraler i kildekode uden escaping.

Kører udelukkende i din browser. Intet bliver uploadet.

Sådan bruger du værktøjet

  1. Vælg Kod for at omdanne tekst eller bytes til Z85, eller Afkod for at omdanne Z85 tilbage til data.
  2. Til nøgler og andre binære værdier sætter du Input som til Hex ved kodning eller Output som til Hex ved afkodning.
  3. Skriv eller indsæt dit input, eller åbn en fil. Resultatet opdateres, mens du skriver.
  4. Kopiér resultatet, eller download det som en fil.

Hvad er Z85?

Z85 er specificeret i ZeroMQ RFC 32 (en specifikation fra ZeroMQ-fællesskabet, ikke en IETF-RFC). Ligesom andre Base85-kodninger omdanner den hver gruppe på 4 bytes til 5 tegn: Hver gruppe læses som et big-endian 32-bit-tal og skrives som 5 cifre i base 85 med det mest betydende ciffer først. Outputtet er 25 % større end inputtet.

Det, der adskiller Z85, er alfabetet: 0-9, a-z, A-Z og de 23 symboler .-:+=^!/*?&<>()[]{}@%$#. Det udelader begge slags anførselstegn, omvendt skråstreg, backtick, komma, semikolon, lodret streg, tilde og understregning. Alfabetet blev designet til at være sikkert i strenge i kildekode, så en Z85-værdi kan indsættes mellem anførselstegn i C, Python eller JSON helt uden escaping.

Her bruges Z85

ZeroMQ bruger Z85 til at udskrive CurveZMQ-nøgler. En offentlig eller hemmelig nøgle på 32 bytes bliver til en Z85-streng på 40 tegn, som er den form, zmq_curve_keypair() returnerer, og som socketindstillingerne til CURVE-sikkerhed accepterer. Biblioteket stiller også zmq_z85_encode() og zmq_z85_decode() til rådighed, og bindinger som pyzmq har de samme funktioner.

// C (libzmq)
char text[41];                       // 32 bytes -> 40 tegn + NUL
zmq_z85_encode(text, key, 32);

# Python (pyzmq)
from zmq.utils import z85
z85.encode(bytes.fromhex('864fd26fb559f75b'))   # b'HelloWorld'

Den sidste linje er testvektoren fra specifikationen.

Inputlængde: en bemærkning om dette værktøj

RFC 32 kræver, at det binære input er et multiplum af 4 bytes, og at den kodede streng er et multiplum af 5 tegn. Den definerer ingen udfyldning, og strikse implementeringer som zmq_z85_encode() afviser andre længder.

Dette værktøj accepterer også andre længder og bruger samme regel som Ascii85 og Base85: En sidste gruppe på n bytes bliver til n + 1 tegn. Det er en udvidelse, der ikke følger standarden. Output, der er lavet på denne måde, kan blive afvist af andre Z85-dekodere, så udfyld dine data til et multiplum af 4 bytes, når du har brug for kompatibilitet. CurveZMQ-nøgler er på 32 bytes og passer altid.

Specifikation

Alfabet0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$#
Outputstørrelse5 tegn pr. 4 bytes (125 %)
UdfyldningIngen
StandardZeroMQ RFC 32
Skelner mellem store og små bogstaverJa

Eksempler

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

Ofte stillede spørgsmål

Hvad er forskellen på Z85 og Ascii85?
Aritmetikken er den samme, alfabeterne er ikke. Ascii85 bruger ASCII-intervallet fra ! til u, som omfatter anførselstegn og omvendt skråstreg, og har genvejen z for nulbytes. Z85 undgår tegn, der skal escapes i strenge, og har ingen genvej.
Bruger Z85 udfyldning?

Nej. Specifikationen tillader kun inputlængder, der er et multiplum af 4 bytes. Dette værktøj koder andre længder med en kortere sidste gruppe, hvilket ikke er en del af standarden.

Kan jeg bruge Z85 i JSON, XML eller URL'er?
I JSON-strenge, ja, uden escaping. I XML og HTML skal <, > og & escapes. Til URL'er passer Z85 dårligt, fordi ?, &, / og # har en særlig betydning; brug i stedet Base64URL eller Base58.
Hvor lang er en Z85-kodet CurveZMQ-nøgle?

En CurveZMQ-nøgle er på 32 bytes, så den bliver kodet til præcis 40 tegn. Hvis du vil se den rå nøgle, kan du afkode den her med Hex valgt under Output som.