So dekodieren Sie Base32
- Fügen Sie die Zeichenkette in Eingabe · Base32 (RFC 4648) ein. Groß- oder Kleinbuchstaben, Leerzeichen zwischen Gruppen und Zeilenumbrüche werden alle akzeptiert, und das
=-Padding ist optional. - Lesen Sie den dekodierten Text in Ausgabe · Text. Der Standard-Zeichensatz ist UTF-8; ändern Sie den Zeichensatz unter der Ausgabe, wenn der Text aus einem anderen System stammt.
- Ist die Ausgabe ein Durcheinander aus Symbolen, sind die Daten binär. Stellen Sie Nach auf Hex oder Base64, um die Bytes zu sehen, oder klicken Sie auf Bytes speichern, um sie als Datei herunterzuladen.
- Verwendet die Eingabe ein anderes Alphabet, stellen Sie Von auf Base32hex, Crockford Base32 oder z-base-32.
- Zum Kodieren klicken Sie im Richtungsschalter auf Text → Base32 (RFC 4648) oder nutzen den Base32-Encoder.
Was der Decoder akzeptiert und was nicht
Der Decoder ist tolerant bei der Formatierung und streng beim Inhalt:
| Eingabe | Ergebnis |
|---|---|
JBSWY3DP | Hello |
jbswy3dp | Hello; die Schreibweise spielt keine Rolle |
JBSW Y3DP EHPK 3PXP | 10 Bytes, 48656c6c6f21deadbeef in Hex |
MZXW6YQ | foob; fehlendes Padding ist kein Problem |
JBSWY3D0 | Fehler: unerwartetes Zeichen "0" an Position 8 |
Der Fehler zeigt auf das erste Zeichen, das nicht zum Alphabet gehört. Eine 0, 1, 8 oder 9 bedeutet fast immer, dass die Zeichenkette ein anderes Base32-Alphabet verwendet, und ein + oder / bedeutet, dass es eigentlich Base64 ist; versuchen Sie es mit dem Base64-Decoder.
Ein 2FA- oder TOTP-Secret dekodieren
Der Schlüssel, den eine Authenticator-App bei der Einrichtung anzeigt, oft gruppiert als jbsw y3dp ehpk 3pxp, ist Base32 nach RFC 4648. Dekodiert ergibt er den rohen HMAC-Schlüssel, also Zufallsbytes, betrachten Sie ihn daher als Hex und nicht als Text. Die Länge verrät die Schlüsselgröße: 16 Zeichen sind 10 Bytes, 32 Zeichen sind 20 Bytes (160 Bit, die von RFC 4226 empfohlene Größe), 52 Zeichen sind 32 Bytes.
Um zu prüfen, ob Sie das richtige Secret haben, erzeugen Sie daraus einen Code. Diese Python-Funktion dekodiert das Secret genauso tolerant und folgt dann RFC 6238:
import base64, hashlib, hmac, struct
def totp(secret, t, digits=6, step=30):
s = secret.replace(" ", "").upper()
key = base64.b32decode(s + "=" * (-len(s) % 8))
mac = hmac.new(key, struct.pack(">Q", t // step), hashlib.sha1).digest()
off = mac[-1] & 0x0F
code = struct.unpack(">I", mac[off:off + 4])[0] & 0x7FFFFFFF
return str(code % 10**digits).zfill(digits)
totp("GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ", 59, 8) # '94287082'
Das Secret und das erwartete 94287082 sind der SHA-1-Testvektor aus RFC 6238. Für den aktuellen Code übergeben Sie int(time.time()) als t. Weitere Muster zum Dekodieren finden Sie auf der Python-Seite.
IPFS CIDv1 und anderes Base32 mit Präfix
Manche Formate setzen eine Markierung vor das Base32. IPFS-CIDv1-Zeichenketten beginnen mit b, dem Multibase-Code für Base32 nach RFC 4648 in Kleinbuchstaben ohne Padding: In bafybei… ist das b das Präfix und afybei… sind die Daten. Entfernen Sie das b, dekodieren Sie und stellen Sie Nach auf Hex. Die ersten Bytes sind die CID-Version (01), der Inhaltstyp (70 für dag-pb) und der Multihash-Header (1220 für einen 32-Byte-SHA-256).
Tor-v3-Onion-Adressen funktionieren genauso, nur ohne Präfix: Die 56 Zeichen vor .onion sind Base32 von 35 Bytes, nämlich einem 32-Byte-Public-Key, einer 2-Byte-Prüfsumme und einem Versionsbyte (03).
Häufige Probleme
- Python wirft
binascii.Error: Non-base32 digit found. Die Eingabe ist in Kleinbuchstaben. Übergeben Siecasefold=Trueanb32decodeoder rufen Sie vorher.upper()auf. - Python wirft
binascii.Error: Incorrect padding. Die=-Zeichen wurden entfernt. Füllen Sie die Länge auf ein Vielfaches von 8 auf, wie in der Funktion oben. base32 -dmeldetinvalid input. GNU coreutils akzeptiert weder Kleinbuchstaben noch Leerzeichen. Bereinigen Sie die Zeichenkette vorher oder dekodieren Sie sie hier.- Der Text wird dekodiert, aber falsch. Base32hex- und Crockford-Zeichenketten lassen sich mit dem falschen Alphabet ohne Fehler dekodieren. Steht in der Quelle „Base32“ und enthält die Zeichenkette keine
0,1,8oder9, ist RFC 4648 weiterhin die beste Annahme; andernfalls probieren Sie die beiden anderen.
Häufige Fragen
Wie dekodiere ich ein TOTP-Secret?
Fügen Sie das Secret ein (den secret=-Wert eines otpauth://-Links oder den Textschlüssel, den eine App statt des QR-Codes anzeigt) und stellen Sie Nach auf Hex. Das Ergebnis ist der rohe HMAC-Schlüssel. Er besteht aus Zufallsbytes, daher sieht die Ausgabe als Text wie Datenmüll aus, und das ist so zu erwarten.
Warum meldet Python beim Dekodieren von Base32 Incorrect padding?
base64.b32decode verlangt eine Länge, die ein Vielfaches von 8 ist. Ergänzen Sie zuerst die fehlenden =: s + "=" * (-len(s) % 8). Dieser Decoder braucht kein Padding.
Kann ich hier eine ULID dekodieren?
Nicht direkt. Eine ULID verwendet das Crockford-Alphabet, kodiert aber eine einzige 128-Bit-Zahl in 26 Zeichen, die mit 2 überzähligen Bits beginnt. Die Crockford-Option hier packt Bytes ab dem ersten Zeichen bitweise, für eine ULID liefert sie daher verschobene Bytes.
Welche Zeichen sind in Base32 ungültig?
In Base32 nach RFC 4648 alles außer A–Z, 2–7 und = am Ende. Die Ziffern 0, 1, 8 und 9 sind das übliche Zeichen dafür, dass die Zeichenkette base32hex oder Crockford ist; stellen Sie Von um, um diese zu probieren.