Base64 URL-safe

URL-veilige Base64 (Base64url) coderen en decoderen

Platte tekst

Base64

Draait lokaal · Veilig om secrets te plakken
Base64-uitvoer...

Wat is Base64url-codering?

Base64url is een variant van Base64-codering die specifiek is ontworpen voor gebruik in URL's, bestandsnamen en andere contexten waar de standaard Base64-tekens + en / problemen veroorzaken. Gedefinieerd in RFC 4648 Section 5 vervangt Base64url + door - (koppelteken) en / door _ (onderstrepingsteken), en laat de afsluitende =-opvultekens weg. Het resultaat is een string die direct in een URL-queryparameter, een bestandsnaam of een HTTP-header kan worden opgenomen zonder extra procentcodering.

Standaard Base64 (RFC 4648 Section 4) gebruikt 64 tekens: A-Z, a-z, 0-9, + en /. De tekens + en / zijn gereserveerd in URL's: + wordt geïnterpreteerd als een spatie in querystrings (application/x-www-form-urlencoded) en / is een padscheidingsteken. Het gebruik van standaard Base64 in een URL vereist daarom procentcodering van deze tekens (%2B, %2F), wat de stringlengte vergroot en de leesbaarheid vermindert. Base64url elimineert dit probleem volledig door van meet af aan URL-veilige tekens te gebruiken.

De meest prominente toepassing van Base64url is in JSON Web Tokens (JWT). Alle drie segmenten van een JWT — header, payload en handtekening — zijn Base64url-gecodeerd. OAuth 2.0 PKCE code_verifier-waarden, WebAuthn-uitdagingswaarden en veel API-tokenschema's maken ook gebruik van Base64url. Het begrijpen van deze codering is essentieel voor elke ontwikkelaar die werkt met authenticatie, autorisatie of cryptografische gegevensuitwisseling.

Waarom Deze Base64url-tool Gebruiken?

Converteer tussen Base64url en tekst of binaire gegevens rechtstreeks in uw browser. Zowel codering als decodering worden ondersteund, met automatische verwerking van opvulling en tekenvervanging. Of u nu een JWT-token debugt, een PKCE-codechallenge genereert of URL-veilige identifiers bouwt, deze tool verwerkt alles lokaal in uw browser met nul latentie en zonder serverroundtrips.

Directe Conversie
De uitvoer wordt bijgewerkt terwijl u typt. Codeer tekst naar Base64url of decodeer Base64url terug naar tekst zonder vertraging — geen formulierverzendingen of paginaherlaadbewerkingen.
🔗
URL-veilige Uitvoer
De uitvoer gebruikt alleen tekens die veilig zijn in URL's, bestandsnamen en HTTP-headers: A-Z, a-z, 0-9, koppelteken en onderstrepingsteken. Geen procentcodering nodig.
🔒
Privacy-eerst Verwerking
Alle codering en decodering wordt lokaal in uw browser uitgevoerd. JWT-tokens, OAuth-geheimen en API-sleutels die u hier plakt, worden nooit naar een server verzonden.
🏛️
Standaardconform
Implementeert RFC 4648 Section 5 exact: - en _ vervangen + en /, opvulling wordt weggelaten. Compatibel met JWT-bibliotheken, OAuth 2.0 PKCE en WebAuthn-implementaties.

Base64url-gebruiksscenario's

JWT-token Inspecteren
Decodeer afzonderlijke JWT-segmenten (header, payload) om claims, vervaltijden en ondertekeningsalgoritmen te inspecteren zonder een JWT-bibliotheek te importeren of de handtekening te verifiëren.
OAuth 2.0 PKCE-flow
Genereer en verifieer PKCE code_verifier en code_challenge-waarden. De code_challenge_method S256 vereist een Base64url-gecodeerde SHA-256-hash van de code_verifier.
WebAuthn / FIDO2-integratie
WebAuthn-uitdagingen, referentie-ID's en attesteringsgegevens worden als Base64url-strings uitgewisseld tussen de browser en de relyingpartyserver. Decodeer ze om registratie- en authenticatiestromen te debuggen.
API-tokengeneratie
Maak URL-veilige tokens van willekeurige bytes voor wachtwoordherstelkoppelingen, e-mailverificatie en sessie-ID's. Base64url produceert compacte strings die zonder escaping in URL's werken.
DevOps en CI/CD-pijplijnen
Sla binaire configuratiewaarden (certificaten, sleutels) op als Base64url-strings in omgevingsvariabelen of YAML-bestanden. In tegenstelling tot standaard Base64 bevat de uitvoer geen tekens die conflicteren met shell-uitbreiding of YAML-syntaxis.
Data Engineering
Codeer binaire identifiers, hashes of controlesommen als Base64url voor gebruik in bestandsnamen, databasesleutels of CSV-kolommen waar de tekens + en / het parseren zouden verstoren of escaping vereisen.

Standaard Base64 vs Base64url

Base64url verschilt op precies drie manieren van standaard Base64. Het coderingsalgoritme is identiek — alleen het alfabet en het opvulgedrag veranderen:

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

Deze drie verschillen betekenen dat conversie tussen standaard Base64 en Base64url eenvoudig is: vervang + door -, / door _, en verwijder afsluitende =-tekens. Omgekeerd: vervang - door +, _ door /, en voeg opvulling toe zodat de lengte een veelvoud van 4 is. De meeste talen bieden native Base64url-ondersteuning, waardoor handmatige conversie overbodig is. Beide conversies zijn volledig omkeerbaar en verliesvrij, waarbij de originele bytereeks exact behouden blijft. Deze interoperabiliteit is gegarandeerd door RFC 4648.

Coderingsvergelijkingstabel

De onderstaande tabel toont dezelfde invoer gecodeerd met standaard Base64 en Base64url. Let op hoe opvultekens (=) worden weggelaten en + / / worden vervangen door - / _ in de URL-veilige variant:

InvoerStandaard Base64Base64url (geen opvulling)
HelloSGVsbG8=SGVsbG8
AQQ==QQ
1+1=2MSsxPTI=MSsxPTI
subject?ref=1c3ViamVjdD9yZWY9MQ==c3ViamVjdD9yZWY9MQ
👍 (thumbs up)8J+RjQ==8J-RjQ

Codevoorbeelden

Hoe Base64url-strings te coderen en decoderen in populaire talen. Elk voorbeeld produceert uitvoer die veilig is voor gebruik in URL's, bestandsnamen en HTTP-headers:

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!"
}

Veelgestelde Vragen

Wat is het verschil tussen Base64 en Base64url?
Base64url vervangt + door - en / door _ uit het standaard Base64-alfabet, en laat afsluitende =-opvultekens weg. Dit maakt de uitvoer veilig voor gebruik in URL's, queryparameters, bestandsnamen en HTTP-headers zonder aanvullende codering. Het onderliggende algoritme (bytes splitsen in 6-bit groepen die worden gekoppeld aan ASCII-tekens) is identiek. In de praktijk kunnen Base64url-strings direct in URL's en HTTP-headers worden opgenomen zonder aanpassing, terwijl standaard Base64-strings procentcodering vereisen (%2B voor +, %2F voor /) in die contexten.
Waarom gebruiken JWT-tokens Base64url in plaats van standaard Base64?
JWT's worden vaak verzonden in URL-queryparameters en HTTP Authorization-headers. De standaard Base64-tekens + en / zouden procentgecodeerd moeten worden in URL's, wat de lengte vergroot en eenvoudige stringvergelijkingen bemoeilijkt. De JWT-specificatie (RFC 7519) schrijft Base64url zonder opvulling voor om te garanderen dat tokens standaard compact en URL-veilig zijn.
Hoe converteer ik standaard Base64 naar Base64url?
Vervang elke + door -, elke / door _, en verwijder alle afsluitende =-tekens. In JavaScript: base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''). In Python: base64.urlsafe_b64encode(data).rstrip(b'='). De meeste moderne talen bieden ook een speciale Base64url-coderingsfunctie. Deze conversie is vaak nodig bij het integreren van oudere bibliotheken die standaard Base64 produceren met moderne systemen die Base64url verwachten, zoals JWT-validators en OAuth 2.0-servers.
Is Base64url-codering omkeerbaar?
Ja, Base64url is volledig omkeerbaar. Om te decoderen vervangt u - door + en _ door /, voegt u =-opvultekens toe zodat de lengte een veelvoud van 4 is, en decodeert u vervolgens als standaard Base64. De gedecodeerde uitvoer is byte-voor-byte identiek aan de oorspronkelijke invoer.
Kan ik Base64url gebruiken voor het versleutelen van gegevens?
Nee. Base64url is een codering, geen versleuteling. Het transformeert binaire gegevens naar een tekstveilig formaat zonder enige geheimhouding — iedereen kan het decoderen. Als u gegevens wilt beschermen, versleutel ze dan eerst met een geschikt algoritme (AES, ChaCha20) en codeer de versleutelde tekst vervolgens met Base64url voor transport.
Waarom wordt opvulling weggelaten in Base64url?
Opvultekens (=) dienen geen doel wanneer de decoder het ontbrekende byteaantal kan berekenen uit de stringlengte: (4 - length % 4) % 4 geeft de benodigde opvulling. Het weglaten van opvulling maakt de string korter en vermijdt =-tekens die procentgecodeerd zouden moeten worden in URL's. RFC 4648 Section 5 staat het weglaten van opvulling in Base64url expliciet toe.
Hoe ga ik in mijn code om met Base64url-strings met opvulling?
Sommige systemen produceren Base64url-strings die =-opvulling behouden. De meeste decoders verwerken dit correct. Als dat bij de uwe niet het geval is, verwijder dan afsluitende =-tekens vóór het decoderen. Omgekeerd geldt: als een bibliotheek opvulling vereist, bereken en voeg deze toe: const padded = str + '='.repeat((4 - str.length % 4) % 4). Dit werkt omdat het aantal opvultekens deterministisch bepaald wordt door de stringlengte.