So wandeln Sie Base32 in Base64 um
- Fügen Sie das Base32 in Eingabe · Base32 (RFC 4648) ein. Leerzeichen zwischen Gruppen, Kleinbuchstaben und fehlende
=sind kein Problem. - Lesen Sie das Base64 in Ausgabe · Base64. Deaktivieren Sie Padding (=) unter der Ausgabe, wenn das Ziel kein
=will, oder setzen Sie Zeilenumbruch für lange Werte. - Ausgabe kopieren. Base64 → Base32 (RFC 4648) im Richtungsschalter führt zurück, ebenso Base64 in Base32.
Beispiele
| Base32 | Base64 | Hinweis |
|---|---|---|
JBSWY3DPEHPK3PXP | SGVsbG8h3q2+7w== | Der Beispielschlüssel aus der Dokumentation zum Key-URI-Format von Google Authenticator, 10 Bytes |
jbsw y3dp ehpk 3pxp | SGVsbG8h3q2+7w== | Derselbe Schlüssel, gruppiert wie in Apps angezeigt |
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ | MTIzNDU2Nzg5MDEyMzQ1Njc4OTA= | Das Test-Secret aus RFC 6238, 20 ASCII-Ziffern |
RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6K | iEwO+V01Llzjb4MxBUtgEuCNW8o= | 20 zufällig wirkende Bytes |
MZXW6YQ | Zm9vYg== | Eingabe ohne Padding; mit Padding lautet sie MZXW6YQ= |
Der erste Schlüssel ergibt dekodiert die Bytes 48 65 6c 6c 6f 21 de ad be ef: das Wort Hello! gefolgt von de ad be ef. Deshalb beginnt sein Base64 mit SGVsbG8h, dem Base64 von Hello!.
Warum ein 2FA-Secret in Base64 umwandeln
Die Base32-Form ist für Menschen gedacht: Sie steckt in QR-Codes und Einrichtungsbildschirmen und lässt sich auf einem Handy abtippen. Code und Konfiguration wollen meist den rohen Schlüssel, und Base64 ist der übliche Weg, rohe Bytes in JSON, YAML, Umgebungsvariablen und Datenbanken abzulegen. Typische Fälle:
- TOTP-Konten aus einer exportierten Liste von
otpauth://-Links in ein System übernehmen, das Secrets als Base64 speichert. - Den Schlüssel an eine HMAC-Funktion oder -Bibliothek übergeben, die Base64 oder Bytes erwartet, etwa wenn Sie Codes auf Ihrem eigenen Server prüfen.
- Zwei Kopien eines Secrets vergleichen. Unterschiedliche Gruppierung, Schreibweise oder unterschiedliches Padding desselben Base32 ergeben alle dieselbe Base64-Zeichenkette, gleiche Ausgabe bedeutet also gleiche Schlüssel.
Ein Secret in Base64 ist genauso sensibel wie das in Base32, bewahren Sie es also dort auf, wo Sie auch ein Passwort aufbewahren würden.
Base32 in Base64 mit Python
Pythons b32decode ist bei Schreibweise und Padding streng, normalisieren Sie die Zeichenkette also zuerst:
import base64
def b32_to_b64(secret):
s = secret.replace(" ", "").upper()
s += "=" * (-len(s) % 8)
return base64.b64encode(base64.b32decode(s)).decode()
b32_to_b64("jbsw y3dp ehpk 3pxp") # 'SGVsbG8h3q2+7w=='
Ohne den Aufruf .upper() wirft Python binascii.Error: Non-base32 digit found, ohne die Padding-Zeile Incorrect padding. Die Base64-Seite behandelt Base64 in Python.
Häufige Probleme
- Fehler bei einer
9,8,1oder0. Diese Ziffern gehören nicht zu Base32 nach RFC 4648. Der Wert ist wahrscheinlich base32hex oder Crockford;91IMOR3Fzum Beispiel scheitert hier an Position 1. Dekodieren Sie ihn im Base32-Decoder mit dem richtigen Alphabet unter Von. - Fehler bei einem
-. Manche Websites zeigen Schlüssel durch Bindestriche getrennt an. Entfernen Sie diese; übersprungen wird nur Leerraum. - Das Base64 stimmt, aber der Server lehnt die Codes ab. Prüfen Sie die übrigen Parameter: Algorithmus, Stellenzahl und Zeitintervall müssen auf beiden Seiten übereinstimmen, und die Uhr des Servers muss nah an der des Handys liegen.
Häufige Fragen
Wie wandle ich einen Google-Authenticator-Schlüssel in Base64 um?
Nehmen Sie den Schlüssel aus dem Parameter secret= des otpauth://-Links (oder den Textschlüssel unter dem QR-Code) und fügen Sie ihn hier ein. JBSWY3DPEHPK3PXP wird zu SGVsbG8h3q2+7w==.
Warum ist das Base64 kürzer als das Base32?
Base64 speichert 6 Bit pro Zeichen, Base32 nur 5, daher brauchen dieselben Bytes weniger Base64-Zeichen: 20 Bytes sind 32 Base32-Zeichen, aber nur 28 Base64-Zeichen.
Kann ich hier base32hex oder Crockford Base32 umwandeln?
Diese Seite liest nur Base32 nach RFC 4648. Öffnen Sie den Base32-Decoder, stellen Sie Von auf Base32hex oder Crockford Base32 und Nach auf Base64.
Wie wandle ich Base32 auf der Kommandozeile in Base64 um?
Mit GNU coreutils: printf 'JBSWY3DPEHPK3PXP' | base32 -d | base64. Die Eingabe muss in Großbuchstaben und ohne Leerzeichen sein; tr -d ' ' | tr a-z A-Z bereinigt sie vorher.