Base85-Encoder und -Decoder

Wandeln Sie Text, Hex-Bytes oder Dateien in Base85 um und zurück. Diese Seite verwendet den Zeichensatz aus RFC 1924, also die Variante, die Python b85encode erzeugt und die in Git-Binärpatches zum Einsatz kommt.

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

Anleitung

  1. Wählen Sie „Kodieren“, um Text oder Bytes in Base85 umzuwandeln, oder „Dekodieren“, um Base85 wieder in Daten zurückzuverwandeln.
  2. Geben Sie Ihre Eingabe ein, fügen Sie sie ein oder klicken Sie auf „Datei öffnen“. Stellen Sie die Eingabe auf Hex um, wenn Sie mit Rohbytes arbeiten.
  3. Das Ergebnis wird während der Eingabe aktualisiert. Wählen Sie beim Dekodieren je nach Inhalt der Daten die Ausgabe als Text oder Hex.
  4. Kopieren Sie das Ergebnis oder laden Sie es als Datei herunter.

Was ist Base85?

Base85 ist eine Familie von Kodierungen, die jeweils 4 Bytes in 5 Zeichen umwandeln. Fünf Ziffern zur Basis 85 können 85 × 85 × 85 × 85 × 85 = 4.437.053.125 Werte darstellen, gerade genug für jede 32-Bit-Zahl. Die Ausgabe ist daher nur 25 % größer als die Eingabe, verglichen mit 33 % bei Base64.

Es gibt mehrere Base85-Alphabete, die nicht untereinander austauschbar sind: Ascii85 (Adobe, PDF), Z85 (ZeroMQ) und das Alphabet auf dieser Seite. Es verwendet 0-9, A-Z, a-z und 23 Symbole: !#$%&()*+-;<=>?@^_`{|}~. Anführungszeichen, Komma, Punkt, Schrägstrich, Doppelpunkt, Backslash und eckige Klammern sind nicht enthalten.

RFC 1924, Git und Python

Der Zeichensatz stammt aus RFC 1924, „A Compact Representation of IPv6 Addresses“, das am 1. April 1996 als Aprilscherz veröffentlicht wurde. Darin wurde vorgeschlagen, eine 128-Bit-IPv6-Adresse als eine einzige Zahl zur Basis 85 mit genau 20 Zeichen zu schreiben. Niemand schreibt IPv6-Adressen auf diese Weise, doch das Alphabet wurde später für allgemeine Binärdaten wiederverwendet:

  • Git speichert Binärdateien in Patches (git diff --binary, git format-patch) als zlib-komprimierte Daten, die mit diesem Alphabet kodiert sind, mit einem Längenzeichen am Anfang jeder Zeile.
  • Python bietet ab Version 3.4 base64.b85encode() und b85decode(), deren Ausgabe mit diesem Tool übereinstimmt.
  • Mercurial verwendet dieselbe Kodierung für Binärdateien in Diffs im Git-Stil.

Beachten Sie, dass RFC 1924 die gesamte 128-Bit-Adresse auf einmal umwandelt, während Git, Python und dieses Tool in Gruppen von 4 Bytes arbeiten. Ein 16-Byte-Wert ergibt daher ein anderes Ergebnis als mit dem Verfahren aus dem RFC.

Verkürzte letzte Gruppen

Ist die Eingabelänge kein Vielfaches von 4, wird die letzte Gruppe mit Nullbytes aufgefüllt und kodiert, und nur die ersten n + 1 Zeichen werden behalten: 1 Byte ergibt 2 Zeichen, 2 Bytes ergeben 3 und 3 Bytes ergeben 4. Der Decoder kehrt diesen Vorgang um, sodass keine Füllzeichen nötig sind. Anders als das z von Ascii85 kennt diese Variante keine Abkürzung für Nullbytes.

# Python 3.4+
import base64
base64.b85encode(b'hello')      # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv')    # b'hello'

Spezifikation

Alphabet0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~
Ausgabegröße5 Zeichen pro 4 Bytes (125 %)
AuffüllungKeine
StandardZeichensatz nach RFC 1924 (Git, Python b85)
Groß-/Kleinschreibung relevantJa

Beispiele

Eingabe (UTF-8)Ausgabe
Hello, World!NM&qnZ!92JZ*pv8Ap
Base64.isLSb`dHZ(42a{
你好<h`KfrM&

Häufig gestellte Fragen

Ist Base85 dasselbe wie Ascii85?
Beide verwenden dieselbe Arithmetik, aber unterschiedliche Zeichen, daher unterscheidet sich ihre Ausgabe. Ascii85 kürzt außerdem vier Nullbytes als z ab und kann von Adobe-Begrenzern umschlossen sein. Für PDF- und PostScript-Daten verwenden Sie die Seite Ascii85.
War RFC 1924 ein echter Standard?

Nein. Es ist ein RFC der Kategorie „Informational“, der als Aprilscherz veröffentlicht und nie für IPv6-Adressen verwendet wurde. Sein Zeichensatz wurde erst später durch Git und Python populär.

Wie viel größer ist die Base85-Ausgabe?
Aus je 4 Bytes werden 5 Zeichen, die Ausgabe ist also 1,25-mal so groß wie die Eingabe. Bei Base64 ist es etwa das 1,33-Fache. basE91 ist noch etwas kompakter.
Kann ich Base85 in JSON oder XML verwenden?
In JSON ja: Das Alphabet enthält weder doppelte Anführungszeichen noch Backslash, es muss also nichts maskiert werden. In XML und HTML müssen die Zeichen <, > und & maskiert werden. Base85 ist nicht URL-sicher.