So wandeln Sie Base64 in Base32 um
- Fügen Sie das Base64 in Eingabe · Base64 ein. URL-sichere Zeichen (
-,_), fehlendes Padding und Zeilenumbrüche sind kein Problem. - Lesen Sie das Ergebnis in Ausgabe · Base32 (RFC 4648).
- Für einen
otpauth://-Link oder eine Authenticator-App deaktivieren Sie Padding (=) unter der Ausgabe. - Klicken Sie auf Ausgabe kopieren. Base32 (RFC 4648) → Base64 im Richtungsschalter wandelt in die Gegenrichtung um, ebenso die Seite Base32 in Base64.
Die Bytes dazwischen ändern sich nicht. Ein 20-Byte-Schlüssel geht hinein, ein 20-Byte-Schlüssel kommt heraus, wie der Zähler Bytes unter dem Tool zeigt.
Beispiele
| Base64 | Base32 | Bytes |
|---|---|---|
iEwO+V01Llzjb4MxBUtgEuCNW8o= | RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6K | 20 |
iEwO-V01Llzjb4MxBUtgEuCNW8o | RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6K | 20, URL-sichere Eingabe ohne Padding |
MTIzNDU2Nzg5MDEyMzQ1Njc4OTA= | GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ | 20, das Test-Secret aus RFC 6238 |
SGVsbG8h3q2+7w== | JBSWY3DPEHPK3PXP | 10 |
Die beiden Zeichenketten in den ersten Zeilen sehen sich überhaupt nicht ähnlich, und das ist normal: Base64 nutzt 6 Bit pro Zeichen, Base32 nur 5, daher liegen die Zeichen nie übereinander.
Vermeiden Sie den Fehler, die Base64-Zeichen als Text zu kodieren. Wer iEwO+V01Llzjb4MxBUtgEuCNW8o= in einen Text-zu-Base32-Encoder einfügt, erhält NFCXOTZLKYYDCTDM…, gültiges Base32 der 28 Zeichen selbst. Die Authenticator-Codes daraus werden nie zum Server passen.
TOTP mit einem Base64-Secret einrichten
Servercode speichert das gemeinsame Secret oft als Base64 oder erzeugt es mit einem Befehl wie diesem:
openssl rand -base64 20
Um es in einer Authenticator-App zu registrieren, wandeln Sie es hier um und bauen dann die Key-URI:
otpauth://totp/Example:alice@example.com?secret=RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6K&issuer=Example
algorithm, digits und period lassen sich als Parameter ergänzen; ohne sie nehmen Apps SHA-1, 6 Ziffern und 30 Sekunden an. Machen Sie aus dem Link mit einem beliebigen lokalen QR-Tool einen QR-Code, oder lassen Sie den Nutzer das Base32-Secret von Hand eingeben. Das Secret sind dieselben Bytes, die Ihr Server in HMAC einspeist, die Codes passen also, ohne dass Sie am Server etwas ändern.
Brauchen Sie ein neues Secret statt eines vorhandenen, erzeugen Sie mit dem Zufalls-Base64-Generator (Vorlage „Eigene“) 20 Zufallsbytes als Base64 und wandeln Sie sie hier um.
Längen für gängige Schlüsselgrößen
| Schlüssel | Base64 | Base32 ohne Padding | Base32 mit = |
|---|---|---|---|
| 10 Bytes (80 Bit) | 16 | 16 | 16 |
| 16 Bytes (128 Bit) | 24 | 26 | 32 |
| 20 Bytes (160 Bit) | 28 | 32 | 32 |
| 32 Bytes (256 Bit) | 44 | 52 | 56 |
Größen, die ein Vielfaches von 5 Bytes sind, wie 10 und 20, ergeben Base32 ganz ohne Padding.
Dieselbe Umwandlung in Python
import base64
secret_b64 = "iEwO+V01Llzjb4MxBUtgEuCNW8o="
base64.b32encode(base64.b64decode(secret_b64)).decode().rstrip("=")
# 'RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6K'
Für URL-sichere Eingaben verwenden Sie base64.urlsafe_b64decode und ergänzen vorher das =-Padding, falls es entfernt wurde. Mehr dazu in Base64 in Python.
Häufige Fragen
Warum brauchen Authenticator-Apps Base32 statt Base64?
Das Key-URI-Format otpauth://, das Apps aus QR-Codes lesen, definiert das Secret als Base32. Außerdem muss es sich abtippen lassen, wenn der QR-Code nicht gescannt werden kann, und Base32 hat kein +, kein / und keine gemischte Groß- und Kleinschreibung, bei der man sich vertun könnte.
Sollte das Base32-Secret =-Padding haben?
Nicht in einem otpauth://-Link: Laut Key-URI-Format sollte das Padding weggelassen werden. Deaktivieren Sie Padding (=). Ein 20-Byte-Secret hat 32 Zeichen und braucht ohnehin kein Padding.
Wie lang sollte ein TOTP-Secret sein?
RFC 4226 verlangt mindestens 128 Bit und empfiehlt 160 Bit, also 20 Bytes: 28 Base64-Zeichen oder 32 Base32-Zeichen.
Ist es ein Sicherheitsrisiko, ein Secret in Base32 umzuwandeln?
Die Kodierung fügt keinen Schutz hinzu und nimmt keinen weg; wer die Zeichenkette in einer der beiden Formen hat, kann Ihre Codes erzeugen. Das Risiko liegt darin, wo Sie sie einfügen. Diese Seite wandelt sie im Browser um, und ihre Content Security Policy blockiert Netzwerkanfragen außer dem Seitenaufrufzähler von Cloudflare.