Så använder du verktyget
- Välj Koda för att göra om text eller byte till Z85, eller Avkoda för att göra om Z85 till data igen.
- För nycklar och andra binära värden väljer du Hex under Indata som vid kodning, eller Hex under Utdata som vid avkodning.
- Skriv, klistra in eller öppna en fil. Resultatet uppdateras medan du skriver.
- Kopiera resultatet eller ladda ned det som en fil.
Vad är Z85?
Z85 specificeras i ZeroMQ RFC 32 (en specifikation från ZeroMQ-communityn, inte en RFC från IETF). Precis som andra Base85-kodningar gör den om varje grupp om 4 byte till 5 tecken: varje grupp läses som ett 32-bitarstal i big-endian-ordning och skrivs som 5 siffror i bas 85, med den mest signifikanta siffran först. Utdatan blir 25 % större än indatan.
Det som skiljer Z85 från de andra är alfabetet: 0-9, a-z, A-Z och de 23 symbolerna .-:+=^!/*?&<>()[]{}@%$#. Det utelämnar båda citattecknen, bakstrecket, den grava accenten (backtick), kommatecknet, semikolonet, det lodräta strecket, tilden och understrecket. Alfabetet utformades för att vara säkert i strängar i källkod, så ett Z85-värde kan klistras in mellan citattecken i C, Python eller JSON utan några escape-tecken alls.
Var Z85 används
ZeroMQ använder Z85 för att skriva ut CurveZMQ-nycklar. En publik eller hemlig nyckel på 32 byte blir en Z85-sträng på 40 tecken, vilket är den form som zmq_curve_keypair() returnerar och som socketalternativen för CURVE-säkerhet accepterar. Biblioteket har också zmq_z85_encode() och zmq_z85_decode(), och bindningar som pyzmq erbjuder samma funktioner.
// C (libzmq)
char text[41]; // 32 byte -> 40 tecken + NUL
zmq_z85_encode(text, key, 32);
# Python (pyzmq)
from zmq.utils import z85
z85.encode(bytes.fromhex('864fd26fb559f75b')) # ger b'HelloWorld'
Den sista raden är testvektorn från specifikationen.
Indatans längd: en anmärkning om verktyget
RFC 32 kräver att den binära indatan är en multipel av 4 byte och att den kodade strängen är en multipel av 5 tecken. Den definierar ingen utfyllnad, och strikta implementationer som zmq_z85_encode() vägrar andra längder.
Det här verktyget accepterar även andra längder och använder samma regel som Ascii85 och Base85: en sista grupp på n byte blir n + 1 tecken. Det är ett tillägg utanför standarden. Utdata som skapats på det sättet kan avvisas av andra Z85-avkodare, så fyll ut datan till en multipel av 4 byte när du behöver kompatibilitet. CurveZMQ-nycklar är 32 byte och passar alltid.
Specifikation
| Alfabet | 0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$# |
|---|---|
| Utdatastorlek | 5 tecken per 4 byte (125 %) |
| Utfyllnad | Ingen |
| Standard | ZeroMQ RFC 32 |
| Skiftlägeskänslig | Ja |
Exempel
| Indata (UTF-8) | Utdata |
|---|---|
Hello, World! | nm=QNz.92jz/PV8aP |
Base64.is | lsB}Dhz^42A@ |
你好 | <H}kFRm= |
Vanliga frågor
Vad är skillnaden mellan Z85 och Ascii85?
! till u, som innehåller citattecken och bakstreck, och har förkortningen z för nollbyte. Z85 undviker tecken som måste escapas i strängar och har ingen förkortning.Använder Z85 utfyllnad?
Nej. Specifikationen tillåter bara indatalängder som är en multipel av 4 byte. Det här verktyget kodar andra längder med en kortare sista grupp, vilket inte ingår i standarden.
Kan jag använda Z85 i JSON, XML eller URL:er?
Hur lång är en Z85-kodad CurveZMQ-nyckel?
En CurveZMQ-nyckel är 32 byte, så den kodas till exakt 40 tecken. Vill du se den råa nyckeln avkodar du den här med Hex som utdata.