Base64 URL-safe

URL-sicheres Base64 (Base64url) kodieren und dekodieren

Klartext

Base64

Läuft lokal · Sicher zum Einfügen von Secrets
Base64-Ausgabe...

Was ist Base64url-Kodierung?

Base64url ist eine Variante der Base64-Kodierung, die speziell für den Einsatz in URLs, Dateinamen und anderen Kontexten entwickelt wurde, in denen die Standard-Base64-Zeichen + und / Probleme verursachen. Definiert in RFC 4648 Abschnitt 5, ersetzt Base64url + durch - (Bindestrich) und / durch _ (Unterstrich) und lässt die abschließenden = Auffüllzeichen weg. Das Ergebnis ist eine Zeichenkette, die direkt in einen URL-Query-Parameter, einen Dateinamen oder einen HTTP-Header eingebettet werden kann, ohne zusätzliche Prozent-Kodierung zu erfordern.

Standard-Base64 (RFC 4648 Abschnitt 4) verwendet 64 Zeichen: A–Z, a–z, 0–9, + und /. Die Zeichen + und / sind in URLs reserviert: + wird in Query-Strings als Leerzeichen interpretiert (application/x-www-form-urlencoded), und / ist ein Pfad-Trennzeichen. Die Verwendung von Standard-Base64 in einer URL erfordert daher eine Prozent-Kodierung dieser Zeichen (%2B, %2F), was die Zeichenkettenlänge erhöht und die Lesbarkeit erschwert. Base64url löst dieses Problem vollständig, indem von Anfang an URL-sichere Zeichen verwendet werden.

Die bekannteste Verwendung von Base64url ist in JSON Web Tokens (JWT). Alle drei Segmente eines JWT — Header, Payload und Signatur — sind Base64url-kodiert. OAuth 2.0 PKCE Code-Verifier, WebAuthn-Challenge-Werte und viele API-Token-Schemas basieren ebenfalls auf Base64url. Das Verständnis dieser Kodierung ist für jeden Entwickler unerlässlich, der mit Authentifizierung, Autorisierung oder kryptografischem Datenaustausch arbeitet.

Warum dieses Base64url-Tool verwenden?

Konvertieren Sie direkt im Browser zwischen Base64url und Text oder Binärdaten. Sowohl Kodierung als auch Dekodierung werden unterstützt, mit automatischer Behandlung von Padding und Zeichenersetzung. Ob Sie ein JWT-Token debuggen, eine PKCE-Code-Challenge generieren oder URL-sichere Identifier erstellen — dieses Tool verarbeitet alles lokal in Ihrem Browser ohne jede Latenz.

Sofortige Konvertierung
Die Ausgabe wird während der Eingabe aktualisiert. Text zu Base64url kodieren oder Base64url zurück zu Text dekodieren — ohne Verzögerung, ohne Formular-Übermittlung oder Seitenneuladen.
🔗
URL-sichere Ausgabe
Die Ausgabe verwendet ausschließlich Zeichen, die in URLs, Dateinamen und HTTP-Headern sicher sind: A–Z, a–z, 0–9, Bindestrich und Unterstrich. Keine Prozent-Kodierung erforderlich.
🔒
Datenschutzpriorisierte Verarbeitung
Alle Kodier- und Dekodieroperationen laufen lokal in Ihrem Browser. JWT-Tokens, OAuth-Secrets und API-Schlüssel, die Sie hier eingeben, werden niemals an einen Server übertragen.
🏛️
Standardkonform
Implementiert RFC 4648 Abschnitt 5 exakt: - und _ ersetzen + und /, Padding wird weggelassen. Kompatibel mit JWT-Bibliotheken, OAuth 2.0 PKCE und WebAuthn-Implementierungen.

Base64url-Anwendungsfälle

JWT-Token-Inspektion
Einzelne JWT-Segmente (Header, Payload) dekodieren, um Claims, Ablaufzeiten und Signaturalgorithmen zu prüfen — ohne eine JWT-Bibliothek zu importieren oder die Signatur zu verifizieren.
OAuth 2.0 PKCE-Flow
PKCE code_verifier- und code_challenge-Werte generieren und verifizieren. Die code_challenge_method S256 erfordert einen Base64url-kodierten SHA-256-Hash des code_verifier.
WebAuthn / FIDO2-Integration
WebAuthn-Challenge, Credential-ID und Attestierungsdaten werden als Base64url-Strings zwischen Browser und Relying-Party-Server übertragen. Dekodieren Sie sie, um Registrierungs- und Authentifizierungsabläufe zu debuggen.
API-Token-Generierung
URL-sichere Tokens aus zufälligen Bytes erstellen — für Passwort-Reset-Links, E-Mail-Verifizierung und Session-Identifier. Base64url erzeugt kompakte Zeichenketten, die in URLs ohne Escaping funktionieren.
DevOps und CI/CD-Pipelines
Binäre Konfigurationswerte (Zertifikate, Schlüssel) als Base64url-Strings in Umgebungsvariablen oder YAML-Dateien speichern. Anders als Standard-Base64 enthält die Ausgabe keine Zeichen, die mit Shell-Expansion oder YAML-Syntax in Konflikt stehen.
Data Engineering
Binäre Identifier, Hashes oder Prüfsummen als Base64url für Dateinamen, Datenbankschlüssel oder CSV-Spalten kodieren, wo + und / das Parsen stören oder ein Escaping erfordern würden.

Standard-Base64 vs. Base64url

Base64url unterscheidet sich von Standard-Base64 in genau drei Punkten. Der Kodierungsalgorithmus ist identisch — nur Alphabet und Padding-Verhalten ändern sich:

MerkmalStandard (RFC 4648 §4)Base64url (RFC 4648 §5)
Index 62+-
Index 63/_
Padding= (required)Omitted

Diese drei Unterschiede bedeuten, dass die Konvertierung zwischen Standard-Base64 und Base64url trivial ist: + durch - ersetzen, / durch _, und abschließende = entfernen. Umgekehrt: - durch + ersetzen, _ durch /, und Padding hinzufügen, um die Länge zu einem Vielfachen von 4 zu machen. Die meisten Sprachen bieten native Base64url-Unterstützung, sodass manuelle Konvertierung unnötig ist.

Kodierungsvergleichstabelle

Die folgende Tabelle zeigt dieselben Eingaben, kodiert mit Standard-Base64 und Base64url. Beachten Sie, wie Auffüllzeichen (=) entfernt und + / / durch - / _ in der URL-sicheren Variante ersetzt werden:

EingabeStandard-Base64Base64url (ohne Padding)
HelloSGVsbG8=SGVsbG8
AQQ==QQ
1+1=2MSsxPTI=MSsxPTI
subject?ref=1c3ViamVjdD9yZWY9MQ==c3ViamVjdD9yZWY9MQ
👍 (thumbs up)8J+RjQ==8J-RjQ

Code-Beispiele

So kodieren und dekodieren Sie Base64url-Strings in gängigen Programmiersprachen. Jedes Beispiel erzeugt Ausgaben, die für URLs, Dateinamen und HTTP-Header sicher verwendbar sind:

JavaScript (browser)
// Encode to Base64url
function toBase64url(str) {
  return btoa(unescape(encodeURIComponent(str)))
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/, '')
}
toBase64url('Hello!') // → "SGVsbG8h"

// Decode from Base64url
function fromBase64url(b64url) {
  const b64 = b64url.replace(/-/g, '+').replace(/_/g, '/')
  const pad = (4 - b64.length % 4) % 4
  return decodeURIComponent(escape(atob(b64 + '='.repeat(pad))))
}
fromBase64url('SGVsbG8h') // → "Hello!"
Node.js
// Native base64url support since Node 15.7
const encoded = Buffer.from('Hello!').toString('base64url')
// → "SGVsbG8h"

const decoded = Buffer.from('SGVsbG8h', 'base64url').toString()
// → "Hello!"

// Decode a JWT payload
const jwt = 'eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0...'
const payload = JSON.parse(Buffer.from(jwt.split('.')[1], 'base64url').toString())
// → { sub: "1234567890" }
Python
import base64

# Encode to Base64url (no padding)
encoded = base64.urlsafe_b64encode(b'Hello!').rstrip(b'=').decode()
# → "SGVsbG8h"

# Decode from Base64url (re-add padding)
def b64url_decode(s: str) -> bytes:
    s += '=' * (4 - len(s) % 4)  # restore padding
    return base64.urlsafe_b64decode(s)

b64url_decode('SGVsbG8h')  # → b'Hello!'
Go
package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    // Encode to Base64url (no padding)
    encoded := base64.RawURLEncoding.EncodeToString([]byte("Hello!"))
    fmt.Println(encoded) // → "SGVsbG8h"

    // Decode from Base64url
    decoded, _ := base64.RawURLEncoding.DecodeString("SGVsbG8h")
    fmt.Println(string(decoded)) // → "Hello!"
}

Häufig gestellte Fragen

Was ist der Unterschied zwischen Base64 und Base64url?
Base64url ersetzt + durch - und / durch _ aus dem Standard-Base64-Alphabet und lässt abschließende = Auffüllzeichen weg. Die Ausgabe ist dadurch in URLs, Query-Parametern, Dateinamen und HTTP-Headern ohne zusätzliche Kodierung verwendbar. Der zugrundeliegende Algorithmus (Aufteilen von Bytes in 6-Bit-Gruppen, die auf ASCII-Zeichen abgebildet werden) ist identisch.
Warum verwenden JWT-Tokens Base64url statt Standard-Base64?
JWTs werden häufig in URL-Query-Parametern und HTTP-Authorization-Headern übertragen. Die Standard-Base64-Zeichen + und / müssten in URLs prozent-kodiert werden, was die Länge erhöht und einfache Zeichenkettenvergleiche erschwert. Die JWT-Spezifikation (RFC 7519) schreibt Base64url ohne Padding vor, um sicherzustellen, dass Tokens standardmäßig kompakt und URL-sicher sind.
Wie konvertiere ich Standard-Base64 zu Base64url?
Jedes + durch - ersetzen, jedes / durch _ und alle abschließenden = entfernen. In JavaScript: base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''). In Python: base64.urlsafe_b64encode(data).rstrip(b'='). Die meisten modernen Sprachen bieten auch eine dedizierte Base64url-Kodierungsfunktion. Diese Konvertierung ist häufig erforderlich, wenn ältere Base64-Bibliotheken mit modernen Systemen integriert werden, die Base64url erwarten.
Ist Base64url-Kodierung umkehrbar?
Ja, Base64url ist vollständig umkehrbar. Zum Dekodieren - durch + und _ durch / ersetzen, Auffüllzeichen = hinzufügen, um die Länge zu einem Vielfachen von 4 zu machen, und dann als Standard-Base64 dekodieren. Die dekodierte Ausgabe ist byte-für-byte identisch mit der ursprünglichen Eingabe.
Kann ich Base64url zur Verschlüsselung von Daten verwenden?
Nein. Base64url ist eine Kodierung, keine Verschlüsselung. Es wandelt Binärdaten in ein textsicheres Format um, ohne jede Geheimhaltung — jeder kann es dekodieren. Wenn Sie Daten schützen müssen, verschlüsseln Sie sie zuerst mit einem geeigneten Algorithmus (AES, ChaCha20) und kodieren Sie dann den Ciphertext mit Base64url für den Transport.
Warum wird Padding in Base64url weggelassen?
Auffüllzeichen (=) dienen keinem Zweck, wenn der Decoder die fehlende Byte-Anzahl aus der Zeichenkettenlänge berechnen kann: (4 - Länge % 4) % 4 ergibt das benötigte Padding. Das Weglassen von Padding macht die Zeichenkette kürzer und vermeidet = Zeichen, die in URLs prozent-kodiert werden müssten. RFC 4648 Abschnitt 5 erlaubt das Weglassen von Padding in Base64url ausdrücklich.
Wie gehe ich mit Base64url-Strings mit Padding in meinem Code um?
Einige Systeme erzeugen Base64url-Strings, die = Padding beibehalten. Die meisten Decoder verarbeiten dies korrekt. Falls nicht, entfernen Sie abschließende = vor der Dekodierung. Umgekehrt, wenn eine Bibliothek Padding erfordert, berechnen und fügen Sie es hinzu: const padded = str + '='.repeat((4 - str.length % 4) % 4). Dies funktioniert, weil die Padding-Anzahl aus der Zeichenkettenlänge deterministisch bestimmbar ist.