Z85-encoder en -decoder

Zet tekst, hex-bytes of bestanden om naar Z85 en terug. Z85 is de Base85-variant van ZeroMQ, met een alfabet dat zonder escaping in stringliterals in broncode past.

Werkt volledig in je browser. Er wordt niets geüpload.

Zo gebruik je het

  1. Kies Coderen om tekst of bytes naar Z85 om te zetten, of Decoderen om Z85 terug te zetten naar gegevens.
  2. Zet voor sleutels en andere binaire waarden bij het coderen Invoer als op Hex, of bij het decoderen Uitvoer als op Hex.
  3. Typ of plak je invoer of gebruik Bestand openen. Het resultaat wordt bijgewerkt terwijl je typt.
  4. Kopieer het resultaat met Kopiëren of sla het met Downloaden op als bestand.

Wat is Z85?

Z85 is vastgelegd in ZeroMQ RFC 32 (een specificatie van de ZeroMQ-gemeenschap, geen RFC van de IETF). Net als andere Base85-coderingen zet het elke 4 bytes om in 5 tekens: elke groep wordt gelezen als een big-endian 32-bitsgetal en geschreven als 5 cijfers in grondtal 85, het meest significante eerst. De uitvoer is 25% groter dan de invoer.

Wat Z85 onderscheidt, is het alfabet: 0-9, a-z, A-Z en de 23 symbolen .-:+=^!/*?&<>()[]{}@%$#. Beide aanhalingstekens, de backslash, de backtick, de komma, de puntkomma, het verticale streepje, de tilde en het onderstrepingsteken zijn weggelaten. Het alfabet is zo ontworpen dat het veilig is in strings in broncode, zodat je een Z85-waarde zonder enige escaping tussen aanhalingstekens kunt plakken in C, Python of JSON.

Waar Z85 wordt gebruikt

ZeroMQ gebruikt Z85 om CurveZMQ-sleutels weer te geven. Een publieke of geheime sleutel van 32 bytes wordt een Z85-string van 40 tekens. Dat is de vorm die zmq_curve_keypair() teruggeeft en die de socketopties voor CURVE-beveiliging accepteren. De bibliotheek biedt ook zmq_z85_encode() en zmq_z85_decode(), en bindings zoals pyzmq hebben dezelfde functies.

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

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

De laatste regel is de testvector uit de specificatie.

Invoerlengte: een opmerking over deze tool

RFC 32 vereist dat de binaire invoer een veelvoud van 4 bytes is en de gecodeerde string een veelvoud van 5 tekens. Er is geen opvulling gedefinieerd, en strikte implementaties zoals zmq_z85_encode() weigeren andere lengtes.

Deze tool accepteert ook andere lengtes en gebruikt daarvoor dezelfde regel als Ascii85 en Base85: een laatste groep van n bytes wordt n + 1 tekens. Dat is een niet-standaard uitbreiding. Uitvoer die zo is gemaakt, kan door andere Z85-decoders worden geweigerd, dus vul je gegevens aan tot een veelvoud van 4 bytes als je compatibiliteit nodig hebt. CurveZMQ-sleutels zijn 32 bytes en passen altijd.

Specificatie

Alfabet0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$#
Uitvoergrootte5 tekens per 4 bytes (125%)
OpvullingGeen
StandaardZeroMQ RFC 32
HoofdlettergevoeligJa

Voorbeelden

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

Veelgestelde vragen

Wat is het verschil tussen Z85 en Ascii85?
De rekenmethode is hetzelfde, de alfabetten niet. Ascii85 gebruikt het ASCII-bereik van ! tot u, waarin aanhalingstekens en de backslash voorkomen, en heeft een z-afkorting voor nulbytes. Z85 vermijdt tekens die in strings ge-escapet moeten worden en heeft geen afkorting.
Gebruikt Z85 opvulling?

Nee. De specificatie staat alleen invoerlengtes toe die een veelvoud van 4 bytes zijn. Deze tool codeert andere lengtes met een kortere laatste groep, wat geen deel uitmaakt van de standaard.

Kan ik Z85 gebruiken in JSON, XML of URL's?
In JSON-strings wel, zonder escaping. In XML en HTML moeten <, > en & worden ge-escapet. Voor URL's is Z85 minder geschikt, omdat ?, &, / en # daar een speciale betekenis hebben; gebruik dan liever Base64URL of Base58.
Hoe lang is een CurveZMQ-sleutel in Z85?

Een CurveZMQ-sleutel is 32 bytes en wordt dus gecodeerd als precies 40 tekens. Wil je de ruwe sleutel zien, decodeer hem hier dan met Uitvoer als op Hex.