Base64URL-Encoder und -Decoder

Wandeln Sie Text, Hex-Bytes oder Dateien in URL-sicheres Base64 um und zurück. Das Alphabet verwendet - und _ statt + und /, und die Auffüllung ist standardmäßig ausgeschaltet, wie bei JSON Web Tokens und OAuth PKCE.

Läuft vollständig in Ihrem Browser. Es wird nichts hochgeladen.

Anleitung

  1. Wählen Sie „Kodieren“ oder „Dekodieren“. Die URL-sichere Variante ist bereits vorausgewählt, die Auffüllung ist ausgeschaltet.
  2. Geben Sie Text ein oder fügen Sie ihn ein, geben Sie Hex-Bytes ein oder klicken Sie auf „Datei öffnen“. Das Ergebnis wird während der Eingabe aktualisiert.
  3. Schalten Sie die „Auffüllung“ nur ein, wenn das empfangende System =-Zeichen am Ende verlangt.
  4. Kopieren Sie das Ergebnis oder laden Sie es herunter.

Was ist Base64URL?

Base64URL ist in Abschnitt 5 von RFC 4648 als „Base 64 Encoding with URL and Filename Safe Alphabet“ definiert. Es funktioniert genau wie Standard-Base64 mit 6 Bit pro Zeichen, tauscht aber die beiden Zeichen aus, die in URLs und Dateipfaden Probleme verursachen:

Standard-Base64Base64URL
Wert 62+-
Wert 63/_
Auffüllung=, erforderlichmeist weggelassen

In einer URL kann + als Leerzeichen gelesen werden, / trennt Pfadsegmente und = trennt in Query-Strings Schlüssel von Werten. Standard-Base64 muss daher per Prozentkodierung maskiert werden, bevor es in einen Link eingefügt wird. Base64URL kommt ohne Maskierung aus. RFC 4648 erlaubt es, die Auffüllung wegzulassen, wenn die Länge aus dem Kontext bekannt ist, und die meisten Spezifikationen, die auf Base64URL aufbauen, tun genau das.

Wo Base64URL verwendet wird

  • JSON Web Tokens. Header, Payload und Signatur eines JWT sind jeweils Base64URL ohne Auffüllung (RFC 7515). Mit dem JWT-Decoder können Sie ein Token lesen.
  • OAuth 2.0 PKCE. Die code_challenge ist der SHA-256-Hashwert des Code-Verifiers als Base64URL ohne Auffüllung (RFC 7636) und daher immer 43 Zeichen lang.
  • JSON Web Keys und WebAuthn. Schlüsselparameter wie n, e, x und y sowie WebAuthn-Challenges und Credential-IDs werden als Base64URL ausgetauscht.
  • Tokens, IDs und Dateinamen. Links zum Zurücksetzen von Passwörtern, signierte URLs und Cache-Schlüssel enthalten Base64URL ohne Maskierung; eine zufällige ID mit 16 Bytes wird zu 22 Zeichen. Auf Dateisystemen, die nicht zwischen Groß- und Kleinschreibung unterscheiden, ist Base32 vorzuziehen, da Base64URL von der Groß-/Kleinschreibung abhängt.

Zwischen Base64 und Base64URL umwandeln

Beide Varianten kodieren dieselben Bytes, die Umwandlung ist also ein reiner Zeichentausch: Ersetzen Sie + durch - und / durch _ und entfernen Sie dann abschließende =. Für den Rückweg tauschen Sie die Zeichen erneut und fügen = hinzu, bis die Länge ein Vielfaches von 4 ist. Der Decoder auf dieser Seite akzeptiert beide Alphabete, mit oder ohne Auffüllung.

// Node.js 16+
Buffer.from(data).toString('base64url')
Buffer.from(str, 'base64url')

# Python (urlsafe_b64encode behält die Auffüllung bei)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

// Java
Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)

Spezifikation

AlphabetA-Z a-z 0-9 - _
Ausgabegröße4 Zeichen pro 3 Bytes (etwa 133 %)
AuffüllungOptional, meist weggelassen
StandardRFC 4648, Abschnitt 5
Groß-/Kleinschreibung relevantJa

Beispiele

Eingabe (UTF-8)Ausgabe
Hello, World!SGVsbG8sIFdvcmxkIQ
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

Häufig gestellte Fragen

Ist Base64URL dasselbe wie ein URL-kodierter Base64-String?
Nein. Bei der Prozentkodierung von Standard-Base64 werden +, / und = zu %2B, %2F und %3D, wodurch der String länger wird. Base64URL verwendet ein anderes Alphabet, sodass überhaupt keine Maskierung nötig ist. Ohne Umwandlung sind die beiden Formen nicht austauschbar.
Sollte Base64URL eine Auffüllung haben?
Das hängt vom Empfänger ab. JWT, JSON Web Keys und PKCE verlangen, dass die Auffüllung weggelassen wird, während urlsafe_b64encode in Python und der Standard-URL-Encoder von Java sie hinzufügen. Lassen Sie sie im Zweifel weg; dieser Decoder akzeptiert beide Formen.
Warum lehnt ein Standard-Base64-Decoder meinen Base64URL-String ab?
Strikte Standard-Decoder akzeptieren - und _ nicht, und manche verlangen eine Auffüllung. Tauschen Sie die Zeichen und ergänzen Sie =-Zeichen, bis die Länge ein Vielfaches von 4 ist, oder dekodieren Sie den String hier.
Wie prüfe ich eine PKCE-Code-Challenge?
Die Challenge ist BASE64URL(SHA256(code_verifier)) ohne Auffüllung. Dekodieren Sie sie hier mit Hex-Ausgabe: Ein korrekter Wert ergibt genau 32 Bytes, die Sie mit dem SHA-256-Hashwert des Verifiers vergleichen können.