So wandeln Sie Base64 in Base64URL um
- Fügen Sie das Base64 in Eingabe · Base64 ein. Zeilenumbrüche aus umbrochenem Base64 und ein
data:...;base64,-Präfix werden automatisch entfernt. - Die URL-sichere Zeichenkette erscheint in Ausgabe · Base64URL.
- Aktivieren Sie Padding (=) unter der Ausgabe, wenn der Empfänger das
=am Ende behalten möchte. - Ausgabe kopieren. Der Schalter Base64URL → Base64 oder die Seite Base64URL in Base64 wandelt zurück.
Die Eingabe wird in Bytes dekodiert und neu kodiert. Eine Zeichenkette, die kein gültiges Base64 ist, liefert daher einen Fehler statt eines halb umgewandelten Ergebnisses.
Beispiele
| Base64 | Base64URL | Hinweis |
|---|---|---|
PDw/Pz8+Pg== | PDw_Pz8-Pg | / und + ersetzt, == entfernt |
eyJyb2xlIjoiYWRtaW4+In0= | eyJyb2xlIjoiYWRtaW4-In0 | JSON mit einem >, ein = entfernt |
E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw+cM= | E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM | die PKCE-Challenge aus RFC 7636, Anhang B |
+/8= | -_8 | die Bytes fb ff |
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 | unverändert: kein +, / oder = |
Die letzte Zeile ist häufig. Kurzes JSON und ASCII-Text kommen beim Kodieren oft ohne + oder / aus, und wenn die Länge ein Vielfaches von 3 Bytes ist, gibt es auch kein Padding, sodass beide Formen identisch sind. Deshalb kann eine vergessene Umwandlung beim Testen unbemerkt bleiben, bis irgendein Wert zufällig ein + oder / erzeugt.
Zeichen des Standard-Base64, die URLs kaputt machen
Drei Zeichen des Standard-Base64 haben in URLs eine besondere Bedeutung:
+steht in Query-Strings für ein Leerzeichen,?t=a+bkommt in vielen Frameworks also alsa ban./trennt Pfadsegmente, Base64 in einem Pfad kann daher zerteilt oder falsch geroutet werden.=trennt den Namen eines Query-Parameters von seinem Wert und muss sicherheitshalber als%3Dgeschrieben werden.
RFC 4648, Abschnitt 5, definiert für diesen Fall Base64URL, mit - und _ anstelle von + und / und einem Padding, das entfallen darf. Solche Werte brauchen in Pfaden, Query-Strings, Cookies oder Dateinamen kein Escaping. Der Artikel Base64 und Base64URL im Vergleich geht auf die Details ein.
Wo Base64URL Pflicht ist
- JWT und JWS. Alle drei Segmente eines JSON Web Token verwenden Base64URL ohne Padding. Der JWT-Decoder liest sie, und Base64 in JWT erklärt das Format.
- OAuth PKCE. Hash-Tools geben den SHA-256-Digest des Verifiers oft als Standard-Base64 aus, die
code_challengemuss aber genau dieser Digest in Base64URL ohne Padding sein. Diese Umwandlung ist der letzte Schritt. - WebAuthn und JWK. Credential-IDs, Challenges und die Schlüsselparameter in einem JSON Web Key sind Base64URL.
- Signierte URLs und Tokens in Links, etwa für Passwort-Resets oder Downloads, bei denen der Wert in einem Pfad oder Query-String steht.
Um Text ohne den Umweg über Standard-Base64 direkt in Base64URL zu kodieren, nutzen Sie den Base64URL-Encoder.
Base64 in Base64URL im Code
import base64
base64.urlsafe_b64encode(b"<<???>>").rstrip(b"=").decode() # 'PDw_Pz8-Pg'
Buffer.from("PDw/Pz8+Pg==", "base64").toString("base64url"); // 'PDw_Pz8-Pg'
"PDw/Pz8+Pg==".replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""); // same, without Buffer
Pythons urlsafe_b64encode behält das Padding bei, daher das rstrip. Die Kodierung "base64url" in Node lässt es weg. Mehr in den Anleitungen zu Python und Node.js.
Häufige Fragen
Verändert die Umwandlung in Base64URL die Daten?
Nein. Beide Alphabete kodieren dieselben Bytes; nur zwei Zeichen und das Padding unterscheiden sich. Beide Formen ergeben beim Dekodieren identische Bytes.
Entferne ich beim Umwandeln das =-Padding?
Richten Sie sich nach dem Empfänger. JWTs (RFC 7515) und PKCE (RFC 7636) verlangen, dass es fehlt. Manche Bibliotheken akzeptieren beides, und einige ältere Decoder bestehen darauf; aktivieren Sie in dem Fall Padding (=).
Kann ich Base64 mit einem regulären Ausdruck in Base64URL umwandeln?
Ja: s.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "") in JavaScript. Das setzt voraus, dass die Eingabe eine saubere Zeile ist; entfernen Sie zuerst die Zeilenumbrüche, wenn sie aus einer PEM-Datei oder einer E-Mail stammt.
Ist Prozentkodierung von Standard-Base64 eine Alternative?
Sie funktioniert, aber +, / und = werden zu %2B, %2F und %3D, jeweils drei Zeichen, und der Wert geht trotzdem kaputt, wenn ein System die URL zweimal dekodiert oder + als Leerzeichen liest. Base64URL hat keines der beiden Probleme.