So kodieren Sie Base64URL
- Geben Sie den Text in Eingabe · Text ein oder fügen Sie ihn ein.
- Kopieren Sie das Base64URL aus Ausgabe · Base64. URL-sicher (- _) und Ohne Padding (=) sind auf dieser Seite bereits aktiviert.
- Will der Empfänger Padding, deaktivieren Sie Ohne Padding (=). Will er Standard-Base64, deaktivieren Sie auch URL-sicher, oder nehmen Sie den Base64-Encoder.
- Kopieren Sie die Ausgabe oder laden Sie sie als
base64.txtherunter.
Einen Wert dekodieren Sie mit dem Base64URL-Decoder. Base64 in Base64URL wandelt bestehende Zeichenketten zwischen den beiden Alphabeten um.
Was sich gegenüber Standard-Base64 ändert
Nur drei Zeichen unterscheiden sich. Alles andere, auch die Regel „3 Bytes zu 4 Zeichen“, bleibt gleich:
| Standard-Base64 | Base64URL | |
|---|---|---|
| Wert 62 | + | - |
| Wert 63 | / | _ |
| Padding | = erforderlich | meist weggelassen |
| Definiert in | RFC 4648, Abschnitt 4 | RFC 4648, Abschnitt 5 |
Bei vielen kurzen Zeichenketten unterscheiden sich die beiden Varianten nur im Padding. Der Unterschied im Alphabet zeigt sich, sobald eine 6-Bit-Gruppe den Wert 62 oder 63 hat, was Zeichen wie ? und > und viele Nicht-ASCII-Bytes erzeugen:
| Eingabe | Standard | Base64URL, ohne Padding |
|---|---|---|
Hi! | SGkh | SGkh |
?>?> | Pz4/Pg== | Pz4_Pg |
subjects?_d | c3ViamVjdHM/X2Q= | c3ViamVjdHM_X2Q |
https://example.com/?q=1 | aHR0cHM6Ly9leGFtcGxlLmNvbS8/cT0x | aHR0cHM6Ly9leGFtcGxlLmNvbS8_cT0x |
Base64 vs. Base64URL behandelt die Geschichte und die Unterschiede beim Dekodieren ausführlicher.
Warum URLs ein eigenes Alphabet brauchen
Jedes der drei Standardzeichen hat in einer URL eine Bedeutung. / trennt Pfadsegmente, = trennt im Query-String Namen von Werten, und + wird von Formular-Decodern als Leerzeichen gelesen. Ein Standard-Base64-Wert wie a+b/c== in einem Query-Parameter kommt als a b/c== an, wenn nicht jedes Zeichen maskiert wurde. Prozentkodierung behebt das, macht aber aus jedem davon drei Zeichen (%2B, %2F, %3D).
Base64URL wählt zwei Zeichen, die in URLs nicht reserviert sind, und lässt das Padding weg, sodass sich ein Wert unverändert in einen Pfad, einen Query-String, ein Fragment, ein Cookie oder einen Dateinamen einfügen lässt. - und _ sind außerdem anders als / auf jedem gängigen Dateisystem in Dateinamen sicher.
Wo Base64URL verwendet wird
- JWT und JOSE. Jeder Teil eines JSON Web Token ist Base64URL ohne Padding, definiert in RFC 7515. Der JWT-Decoder liest Tokens; Base64 in JWT erklärt den Aufbau.
- OAuth PKCE. Die
code_challengeist das Base64URL des SHA-256-Hashs descode_verifier. - WebAuthn und Passkeys. Credential-IDs und Challenges werden als Base64URL in JSON übertragen.
- Links und IDs. Share-Links, signierte URL-Parameter und kurze IDs aus Zufallsbytes nutzen es, um URL-sauber zu bleiben.
Base64URL im Code
Node.js hat eine eingebaute Kodierung base64url, Python eine URL-sichere Funktion, deren Padding Sie selbst entfernen:
// Node.js
Buffer.from("subjects?_d").toString("base64url"); // "c3ViamVjdHM_X2Q"
// Browsers with Uint8Array.prototype.toBase64
new TextEncoder().encode("subjects?_d").toBase64({ alphabet: "base64url", omitPadding: true });
import base64, hashlib
base64.urlsafe_b64encode(b"subjects?_d").rstrip(b"=").decode() # 'c3ViamVjdHM_X2Q'
# PKCE code_challenge, example from RFC 7636 appendix B
verifier = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"
digest = hashlib.sha256(verifier.encode("ascii")).digest()
base64.urlsafe_b64encode(digest).rstrip(b"=").decode()
# 'E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM'
Mehr unter Base64 in Node.js, JavaScript und Python, die Browser-API unter Uint8Array.toBase64.
Häufige Fragen
Was ist Base64URL?
Die URL- und dateinamensichere Variante von Base64 aus RFC 4648, Abschnitt 5. Sie verwendet - und _ als letzte zwei Zeichen des Alphabets statt + und / und wird meist ohne =-Padding geschrieben.
Warum nicht einfach normales Base64 prozentkodieren?
Das funktioniert, kostet aber drei Zeichen für jedes +, / und =, und ein vergessenes Escape macht beim Parsen des Query-Strings aus + ein Leerzeichen. Base64URL vermeidet beide Probleme.
Soll ich das =-Padding behalten?
JWT und die meisten URL-sicheren Formate lassen es weg, weil = in URLs ebenfalls maskiert werden muss und der Decoder das Padding aus der Länge ableiten kann. Behalten Sie es nur, wenn das empfangende System es verlangt: Deaktivieren Sie dann „Ohne Padding“.
Wie erzeuge ich eine PKCE-code_challenge?
Hashen Sie den code_verifier mit SHA-256 und kodieren Sie die 32 Hash-Bytes ohne Padding in Base64URL. Diese Seite kodiert Text, keine Hash-Bytes, erledigen Sie das also im Code; das Snippet unten reproduziert das Beispiel aus RFC 7636.