Base64URL-encoder en -decoder

Zet tekst, hex-bytes of bestanden om naar URL-veilige Base64 en terug. Het alfabet gebruikt - en _ in plaats van + en /, en opvulling staat standaard uit, net als bij JSON Web Tokens en OAuth PKCE.

Werkt volledig in je browser. Er wordt niets geüpload.

Zo gebruik je het

  1. Kies Coderen of Decoderen. De URL-veilige variant is al geselecteerd en Opvulling staat uit.
  2. Typ of plak tekst, voer hex-bytes in of open een bestand. Het resultaat wordt bijgewerkt terwijl je typt.
  3. Zet Opvulling alleen aan als het ontvangende systeem =-tekens aan het eind vereist.
  4. Kopieer het resultaat met Kopiëren of sla het op met Downloaden.

Wat is Base64URL?

Base64URL is gedefinieerd in sectie 5 van RFC 4648 als "Base 64 Encoding with URL and Filename Safe Alphabet". Het werkt precies zoals standaard-Base64, met 6 bits per teken, maar vervangt de twee tekens die in URL's en bestandspaden problemen geven:

Standaard-Base64Base64URL
Waarde 62+-
Waarde 63/_
Opvulling=, verplichtmeestal weggelaten

In een URL kan + als spatie worden gelezen, scheidt / padsegmenten en scheidt = querysleutels van hun waarden. Standaard-Base64 moet daarom procentgecodeerd worden voordat het in een link terechtkomt. Base64URL heeft geen escaping nodig. RFC 4648 staat toe dat de opvulling wordt weggelaten als de lengte uit de context bekend is, en de meeste specificaties die op Base64URL voortbouwen, doen precies dat.

Waar Base64URL wordt gebruikt

  • JSON Web Tokens. De header, payload en handtekening van een JWT zijn elk Base64URL zonder opvulling (RFC 7515). Bekijk er een met de JWT-decoder.
  • OAuth 2.0 PKCE. De code_challenge is de Base64URL-vorm zonder opvulling van de SHA-256-hash van de code verifier (RFC 7636), en is daardoor altijd 43 tekens lang.
  • JSON Web Keys en WebAuthn. Sleutelparameters zoals n, e, x en y, en ook WebAuthn-challenges en credential-ID's, worden als Base64URL uitgewisseld.
  • Tokens, ID's en bestandsnamen. Resetlinks, ondertekende URL's en cachesleutels bevatten Base64URL zonder escaping; een willekeurige ID van 16 bytes wordt 22 tekens. Kies op bestandssystemen die geen onderscheid maken tussen hoofdletters en kleine letters liever Base32, want Base64URL is hoofdlettergevoelig.

Omzetten tussen Base64 en Base64URL

Beide varianten coderen dezelfde bytes, dus omzetten komt neer op tekens verwisselen: vervang + door - en / door _, en verwijder daarna de afsluitende =. Om terug te gaan, verwissel je de tekens opnieuw en voeg je = toe tot de lengte een veelvoud van 4 is. De decoder op deze pagina accepteert beide alfabetten, met of zonder opvulling.

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

# Python (urlsafe_b64encode behoudt de opvulling)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

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

Specificatie

AlfabetA-Z a-z 0-9 - _
Uitvoergrootte4 tekens per 3 bytes (ongeveer 133%)
OpvullingOptioneel, meestal weggelaten
StandaardRFC 4648, sectie 5
HoofdlettergevoeligJa

Voorbeelden

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

Veelgestelde vragen

Is Base64URL hetzelfde als een Base64-string URL-coderen?
Nee. Procentcodering van standaard-Base64 zet +, / en = om in %2B, %2F en %3D, waardoor de string langer wordt. Base64URL gebruikt een ander alfabet, zodat er helemaal geen escaping nodig is. De twee vormen zijn niet zonder omzetting uitwisselbaar.
Moet Base64URL opvulling hebben?
Dat hangt af van de ontvanger. JWT, JSON Web Keys en PKCE vereisen dat de opvulling wordt weggelaten, terwijl urlsafe_b64encode van Python en de standaard-URL-encoder van Java wel opvulling toevoegen. Laat de opvulling bij twijfel weg; deze decoder accepteert beide vormen.
Waarom weigert een standaard-Base64-decoder mijn Base64URL-string?
Strikte standaarddecoders accepteren - en _ niet, en sommige vereisen opvulling. Verwissel de tekens en voeg =-tekens toe zodat de lengte een veelvoud van 4 wordt, of decodeer de string hier.
Hoe controleer ik een PKCE code challenge?
De challenge is BASE64URL(SHA256(code_verifier)) zonder opvulling. Decodeer hem hier met Uitvoer als op Hex: een correcte waarde levert precies 32 bytes op, die je kunt vergelijken met de SHA-256-hash van de verifier.