Datei hochladen
  1. base64hub
  2. Weitere Basen
  3. Z85

Z85-Encoder und -Decoder (ZeroMQ)

Fügen Sie Bytes als Hex ein und erhalten Sie Z85, die Base85-Variante, die ZeroMQ für CurveZMQ-Schlüssel verwendet. Die Eingabe muss, wie die Spezifikation verlangt, ein Vielfaches von 4 Bytes sein, es sei denn, Sie erlauben einen unvollständigen letzten Block.

Kostenlos ohne Anmeldung, ohne Limits Lokal kein Upload Spezifikationsgenau besteht die Testvektoren aus ZeroMQ RFC 32 Aktualisiert 27.10.2026
Eingabe 0Bytes 0 BAusgabe 0

Wird in Ihrem Browser verarbeitet. Diese Seite kann Ihre Daten nirgendwohin senden – woher wir das wissen

So kodieren und dekodieren Sie Z85

  1. Fügen Sie die Bytes als Hex in Eingabe · Hex ein. Leerzeichen, Doppelpunkte und 0x-Präfixe werden akzeptiert, ein Hex-Dump lässt sich also unverändert einfügen.
  2. Lesen Sie das Z85 in Ausgabe · Z85 (ZeroMQ).
  3. Ist die Byte-Anzahl kein Vielfaches von 4, erhalten Sie einen Fehler, der die Anzahl nennt. Aktivieren Sie Unvollständigen letzten Block erlauben (nicht standardkonform) nur, wenn sich beide Seiten auf diese Erweiterung geeinigt haben.
  4. Zum Dekodieren klicken Sie im Richtungsumschalter auf Z85 (ZeroMQ) → Hex und fügen den Z85-String ein. Stellen Sie Nach auf Base64 oder Text für andere Ansichten, oder nutzen Sie Bytes speichern für eine Binärdatei.

Die Testvektoren der Spezifikation

Die Z85-Spezifikation von ZeroMQ (RFC 32 in der ZeroMQ-RFC-Reihe) nennt zwei Testwerte. Dieses Tool reproduziert beide:

HexZ85
86 4F D2 6F B5 59 F7 5BHelloWorld
8E 0B DD 69 76 28 B9 1D 8F 24 55 87 EE 95 C5 B0 4D 48 96 3F 79 25 98 77 B4 9C D9 06 3A EA D3 B7JTKVSB%%)wK0E.X)V>+}o?pNmC{O&4W4b!Ni{Lh6

Der erste zeigt die Blockstruktur: 8 Bytes, zwei Blöcke, zehn Zeichen. Der zweite ist ein 32-Byte-Schlüssel mit seiner 40-Zeichen-Kodierung, der Größe, die Sie in CurveZMQ-Konfigurationen sehen.

Ein paar Grenzwerte: Vier Null-Bytes sind 00000, vier ff-Bytes sind %nSc0. Z85 hat keine Abkürzung für Nullblöcke, eine Folge von Nullen bleibt also bei fünf Zeichen pro Block.

Warum ZeroMQ Z85 verwendet

CurveZMQ-Schlüssel sind 32 Zufallsbytes. ZeroMQ brauchte einen Weg, sie als einfache Strings in Konfigurationsdateien, Kommandozeilen und Quellcode unterzubringen. Dafür wurde Z85 entworfen:

  • Es ist 25 % größer als die rohen Bytes, gegenüber 33 % bei Base64, ein 32-Byte-Schlüssel hat also 40 statt 44 Zeichen.
  • Sein Alphabet enthält kein ", ', \ und keinen Backtick, ein Schlüssel passt also ohne Maskierung in ein String-Literal in C, Python oder der Shell. Außerdem meidet es , und ;.
  • Ziffern und Buchstaben kommen zuerst (0-9 a-z A-Z), gefolgt von 23 Satzzeichen: .-:+=^!/*?&<>()[]{}@%$#.

Es enthält aber <, > und &, Z85 in XML oder HTML muss also maskiert werden. In JSON ist keine Maskierung nötig.

Z85 in Python

Z85 und Pythons b85encode teilen sich die Arithmetik und unterscheiden sich nur im Alphabet, eine Zeichenübersetzung wandelt also das eine ins andere um:

import base64

B85 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~"
Z85 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"
TO_Z85 = str.maketrans(B85, Z85)
FROM_Z85 = str.maketrans(Z85, B85)

def z85encode(data: bytes) -> str:
    if len(data) % 4:
        raise ValueError("Z85 needs a multiple of 4 bytes")
    return base64.b85encode(data).decode().translate(TO_Z85)

def z85decode(text: str) -> bytes:
    return base64.b85decode(text.translate(FROM_Z85))

z85encode(bytes.fromhex("864FD26FB559F75B"))   # 'HelloWorld'

Hängen Sie ohnehin von PyZMQ ab, erledigen zmq.utils.z85.encode und decode dasselbe. In C hat libzmq zmq_z85_encode und zmq_z85_decode. Mehr zum Umgang mit Bytes in Python auf der Python-Seite.

Häufige Probleme

  • „Z85 kodiert 4-Byte-Blöcke, die Daten haben aber N Bytes“. Die Eingabe ist nicht an Blöcken ausgerichtet. Prüfen Sie, ob Sie den ganzen Schlüssel kopiert haben; ein 32-Byte-Schlüssel, der 31 Bytes anzeigt, hat ein Paar Hex-Ziffern verloren.
  • „Z85 braucht Gruppen zu 5 Zeichen; N bleiben übrig“. Der Z85-String wurde abgeschnitten oder hat zusätzliche Zeichen. Ein CurveZMQ-Schlüssel muss genau 40 Zeichen lang sein.
  • Der String dekodiert, aber der Schlüssel funktioniert nicht. Es könnte Ascii85 oder Git-Base85 sein, die dieselben Längenregeln, aber nicht dasselbe Alphabet haben; dieselben Zeichen dekodieren dann zu anderen Bytes. Probieren Sie es auf der Base85-Seite mit Von auf einer anderen Variante.

Häufige Fragen

Warum verlangt Z85 ein Vielfaches von 4 Bytes?

Die Spezifikation definiert Z85 nur für ganze 4-Byte-Blöcke, damit sich ein Decoder darauf verlassen kann, dass je 5 Zeichen 4 Bytes ergeben. Daten anderer Länge muss die Anwendung auffüllen oder einrahmen. Aktivieren Sie Unvollständigen letzten Block erlauben (nicht standardkonform), um den Rest trotzdem im Stil von Ascii85 zu kodieren.

Wie lang ist ein Z85-CurveZMQ-Schlüssel?

40 Zeichen. Öffentliche und geheime CurveZMQ-Schlüssel haben 32 Bytes, und 32 / 4 × 5 = 40. Das ist die Länge, die zmq_curve_keypair() zurückgibt, in C plus abschließendes Nullbyte.

Ist Z85 dasselbe wie Ascii85?

Gleiche Arithmetik, anderes Alphabet. Beide schreiben 4 Bytes als 5 Ziffern zur Basis 85, doch Z85 stellt Ziffern und Buchstaben an den Anfang, vermeidet Anführungszeichen und Backslashes und hat weder die Abkürzung z noch die Begrenzer <~ ~>.

Wie kodiere ich Z85 in Python?

Die Standardbibliothek hat kein Z85, aber base64.b85encode verwendet dieselbe Arithmetik, eine Übersetzung des Ausgabealphabets ergibt also Z85. Das Snippet auf dieser Seite macht genau das. PyZMQ bringt außerdem zmq.utils.z85 mit.