Z85-Encoder und -Decoder

Wandeln Sie Text, Hex-Bytes oder Dateien in Z85 um und zurück. Z85 ist die von ZeroMQ definierte Base85-Variante, deren Alphabet ohne Maskierung in String-Literale im Quellcode passt.

Läuft vollständig in Ihrem Browser. Es wird nichts hochgeladen.

Anleitung

  1. Wählen Sie „Kodieren“, um Text oder Bytes in Z85 umzuwandeln, oder „Dekodieren“, um Z85 wieder in Daten zurückzuverwandeln.
  2. Stellen Sie für Schlüssel und andere Binärwerte beim Kodieren die Eingabe auf Hex oder beim Dekodieren die Ausgabe auf Hex.
  3. Geben Sie Text ein, fügen Sie ihn ein oder öffnen Sie eine Datei. Das Ergebnis wird während der Eingabe aktualisiert.
  4. Kopieren Sie das Ergebnis oder laden Sie es als Datei herunter.

Was ist Z85?

Z85 ist in ZeroMQ RFC 32 spezifiziert (einer Spezifikation der ZeroMQ-Community, kein IETF-RFC). Wie andere Base85-Kodierungen wandelt es je 4 Bytes in 5 Zeichen um: Jede Gruppe wird als 32-Bit-Zahl in Big-Endian-Reihenfolge gelesen und als 5 Ziffern zur Basis 85 geschrieben, die höchstwertige zuerst. Die Ausgabe ist 25 % größer als die Eingabe.

Was Z85 auszeichnet, ist sein Alphabet: 0-9, a-z, A-Z und die 23 Symbole .-:+=^!/*?&<>()[]{}@%$#. Es lässt beide Anführungszeichen, den Backslash, den Backtick, das Komma, das Semikolon, den senkrechten Strich, die Tilde und den Unterstrich weg. Das Alphabet wurde so entworfen, dass es in Strings im Quellcode sicher ist: Ein Z85-Wert kann in C, Python oder JSON ohne jede Maskierung zwischen Anführungszeichen eingefügt werden.

Wo Z85 verwendet wird

ZeroMQ verwendet Z85 zur Darstellung von CurveZMQ-Schlüsseln. Ein öffentlicher oder geheimer Schlüssel mit 32 Bytes wird zu einem Z85-String mit 40 Zeichen. In dieser Form liefert ihn zmq_curve_keypair(), und so akzeptieren ihn die Socket-Optionen für CURVE-Sicherheit. Die Bibliothek stellt außerdem zmq_z85_encode() und zmq_z85_decode() bereit, und Bindings wie pyzmq bieten dieselben Funktionen.

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

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

Die letzte Zeile ist der Testvektor aus der Spezifikation.

Eingabelänge: ein Hinweis zu diesem Tool

RFC 32 verlangt, dass die Binäreingabe ein Vielfaches von 4 Bytes und der kodierte String ein Vielfaches von 5 Zeichen lang ist. Eine Auffüllung ist nicht definiert, und strikte Implementierungen wie zmq_z85_encode() lehnen andere Längen ab.

Dieses Tool akzeptiert auch andere Längen und wendet dieselbe Regel an wie Ascii85 und Base85: Eine letzte Gruppe aus n Bytes wird zu n + 1 Zeichen. Dabei handelt es sich um eine nicht standardkonforme Erweiterung. So erzeugte Ausgaben werden von anderen Z85-Decodern möglicherweise abgelehnt; füllen Sie Ihre Daten daher auf ein Vielfaches von 4 Bytes auf, wenn Sie Kompatibilität benötigen. CurveZMQ-Schlüssel haben 32 Bytes und passen immer.

Spezifikation

Alphabet0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$#
Ausgabegröße5 Zeichen pro 4 Bytes (125 %)
AuffüllungKeine
StandardZeroMQ RFC 32
Groß-/Kleinschreibung relevantJa

Beispiele

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

Häufig gestellte Fragen

Was ist der Unterschied zwischen Z85 und Ascii85?
Die Arithmetik ist gleich, die Alphabete sind es nicht. Ascii85 verwendet den ASCII-Bereich von ! bis u, der Anführungszeichen und den Backslash einschließt, und kennt die Abkürzung z für Nullbytes. Z85 vermeidet Zeichen, die in Strings maskiert werden müssen, und hat keine Abkürzung.
Verwendet Z85 eine Auffüllung?

Nein. Die Spezifikation erlaubt nur Eingabelängen, die ein Vielfaches von 4 Bytes sind. Dieses Tool kodiert andere Längen mit einer kürzeren letzten Gruppe, was nicht zum Standard gehört.

Kann ich Z85 in JSON, XML oder URLs verwenden?
In JSON-Strings ja, ohne Maskierung. In XML und HTML müssen <, > und & maskiert werden. Für URLs eignet sich Z85 schlecht, weil ?, &, / und # dort eine besondere Bedeutung haben; verwenden Sie stattdessen Base64URL oder Base58.
Wie lang ist ein Z85-kodierter CurveZMQ-Schlüssel?

Ein CurveZMQ-Schlüssel hat 32 Bytes und ergibt kodiert genau 40 Zeichen. Um den Rohschlüssel zu sehen, dekodieren Sie ihn hier mit Hex-Ausgabe.