Base32hex-Encoder und -Decoder

Wandeln Sie Text, Hex-Bytes oder Dateien in Base32 mit dem erweiterten Hex-Alphabet um und zurück. Steuern Sie Auffüllung sowie Groß- und Kleinschreibung, zum Beispiel für Labels im NSEC3-Stil.

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

Anleitung

  1. Wählen Sie „Kodieren“, um Text in Base32hex umzuwandeln, oder „Dekodieren“, um Base32hex wieder in Text umzuwandeln.
  2. Lassen Sie bei „Variante“ Base32hex ausgewählt. Schalten Sie die „Auffüllung“ aus oder wechseln Sie zu „Kleinbuchstaben“, wenn Ihr Format das erfordert.
  3. Geben Sie die Eingabe ein, fügen Sie sie ein oder klicken Sie auf „Datei öffnen“. Das Ergebnis wird während der Eingabe aktualisiert.
  4. Kopieren Sie das Ergebnis oder laden Sie es als Datei herunter.

Was ist Base32hex?

Base32hex ist das in Abschnitt 7 von RFC 4648 definierte „Base 32 Encoding with Extended Hex Alphabet“. Es funktioniert genau wie das Standard-Base32: Jedes Zeichen trägt 5 Bit, aus je 5 Bytes werden 8 Zeichen, und die Ausgabe wird mit = auf ein Vielfaches von 8 aufgefüllt. Nur das Alphabet ist anders. Statt A-Z 2-7 zählt Base32hex dort weiter, wo das Hexadezimalsystem aufhört: Die Ziffern 0 bis 9 stehen für 0 bis 9, A ist 10 und V ist 31.

Da die beiden Alphabete die meisten Zeichen gemeinsam haben, verarbeitet ein Standard-Base32-Decoder einen Base32hex-String oft ohne Fehlermeldung, doch die dabei entstehenden Bytes sind falsch. Dekodieren Sie immer mit derselben Variante, mit der kodiert wurde.

Die Sortierreihenfolge bleibt erhalten

Das Alphabet ist in aufsteigender ASCII-Reihenfolge angeordnet, und der Wert jedes Zeichens wächst mit seiner Position. Vergleicht man also zwei Base32hex-Strings Zeichen für Zeichen, ergibt sich dieselbe Reihenfolge wie beim Vergleich der zugrunde liegenden Bytes. RFC 4648 hebt dies als die Eigenschaft hervor, die Standard-Base32 und Base64 fehlt. Dadurch eignet sich Base32hex gut für Schlüssel in sortierten Speichern wie Datenbanken und Key-Value-Stores.

Schreiben Sie alle Strings einheitlich in Groß- oder in Kleinbuchstaben, und schalten Sie die Auffüllung aus, wenn die Eingaben unterschiedlich lang sind: Das Zeichen = wird zwischen den Ziffern und den Buchstaben einsortiert und kann die Reihenfolge durcheinanderbringen.

Base32hex in NSEC3-Einträgen von DNSSEC

NSEC3-Einträge, definiert in RFC 5155, beweisen, dass ein DNS-Name nicht existiert, und erschweren es zugleich, alle Namen der Zone aufzulisten. Jeder Name wird mit SHA-1 gehasht, und der 20 Byte lange Hashwert wird als 32 Zeichen langes Base32hex-Label ohne Auffüllung geschrieben, meist in Kleinbuchstaben dargestellt. Weil die Kodierung die Reihenfolge der Hashwerte erhält, bilden die gehashten Namen eine sortierte Kette. Um einen Hashwert in ein solches Label umzuwandeln, fügen Sie ihn als Hex-Eingabe ein, schalten die „Auffüllung“ aus und wählen „Kleinbuchstaben“. Dieses Tool führt nur den Kodierungsschritt aus; den gesalzenen, iterierten NSEC3-Hashwert berechnet es nicht.

Base32hex im Programmcode

# Python 3.10+
import base64
base64.b32hexencode(b'foobar')          # b'CPNMUOJ1E8======'
base64.b32hexdecode('CPNMUOJ1E8======') # b'foobar'

// Go (import "encoding/base32")
base32.HexEncoding.EncodeToString(data)
base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(data)

Spezifikation

Alphabet0-9 A-V
Ausgabegröße8 Zeichen pro 5 Bytes (160 %)
AuffüllungMit = auf ein Vielfaches von 8 Zeichen
StandardRFC 4648, Abschnitt 7
Groß-/Kleinschreibung relevantNein

Beispiele

Eingabe (UTF-8)Ausgabe
Hello, World!91IMOR3F5GG5ERRIDHI22===
Base64.is89GN6P9M6GN6ISO=
你好SIUQ1PD5NK======

Häufig gestellte Fragen

Was ist der Unterschied zwischen Base32 und Base32hex?
Beide verwenden 5 Bit pro Zeichen und dieselben Regeln für die Auffüllung. Standard-Base32 nutzt A-Z 2-7, Base32hex dagegen 0-9 A-V, wodurch die Sortierreihenfolge der Daten erhalten bleibt. Die beiden sind nicht austauschbar.
Unterscheidet Base32hex zwischen Groß- und Kleinschreibung?

Das Alphabet ist in Großbuchstaben definiert, dieser Decoder akzeptiert aber auch Eingaben in Kleinbuchstaben. Aktivieren Sie „Kleinbuchstaben“, wenn Sie eine Ausgabe in Kleinbuchstaben benötigen, zum Beispiel für DNS-Labels.

Sollte ich Auffüllung verwenden?
RFC 4648 füllt mit = auf ein Vielfaches von 8 Zeichen auf, viele Formate, darunter NSEC3, lassen die Auffüllung jedoch weg. Der Decoder akzeptiert beides, wählen Sie also, was das empfangende System erwartet.
Ist ein Base32hex-String dasselbe wie Hexadezimal?
Nein. Ein Base32hex-String, der zufällig nur 0-9 und A-F enthält, sieht wie Hex aus, doch jedes Zeichen trägt 5 statt 4 Bit. Für gewöhnliches Hex verwenden Sie das Base16-Tool.