Base64URL-koder og -dekoder

Konverter tekst, hex-byte eller filer til URL-sikker Base64 og tilbake. Alfabetet bruker - og _ i stedet for + og /, og utfylling er slått av som standard, slik som i JSON Web Tokens og OAuth PKCE.

Kjører helt i nettleseren din. Ingenting lastes opp.

Slik bruker du verktøyet

  1. Velg Kode eller Dekode. Den URL-sikre varianten er forhåndsvalgt, og utfylling er slått av.
  2. Skriv eller lim inn tekst, skriv inn hex-byte eller åpne en fil. Resultatet oppdateres mens du skriver.
  3. Slå bare på utfylling hvis mottakersystemet krever =-tegn på slutten.
  4. Kopier resultatet eller last det ned.

Hva er Base64URL?

Base64URL er definert i avsnitt 5 i RFC 4648 som «Base 64 Encoding with URL and Filename Safe Alphabet». Den fungerer akkurat som standard Base64, med 6 bit per tegn, men bytter ut de to tegnene som skaper problemer i URL-er og filstier:

Standard Base64Base64URL
Verdi 62+-
Verdi 63/_
Utfylling=, påkrevdutelates vanligvis

I en URL kan + tolkes som et mellomrom, / skiller stisegmenter og = skiller nøkler fra verdier i spørrestrengen. Standard Base64 må derfor prosentkodes før den kan brukes i en lenke. Base64URL trenger ingen slik koding. RFC 4648 tillater at utfyllingen utelates når lengden er kjent ut fra konteksten, og de fleste spesifikasjoner som bygger på Base64URL, gjør nettopp det.

Hvor Base64URL brukes

  • JSON Web Tokens. Headeren, nyttelasten og signaturen i et JWT er hver for seg Base64URL uten utfylling (RFC 7515). Du kan lese et token med JWT-dekoderen.
  • OAuth 2.0 PKCE. code_challenge er SHA-256-hashen av kodeverifikatoren (code verifier, RFC 7636), kodet som Base64URL uten utfylling, så den er alltid 43 tegn lang.
  • JSON Web Keys og WebAuthn. Nøkkelparametere som n, e, x og y, samt challenges og credential-ID-er i WebAuthn, utveksles som Base64URL.
  • Tokener, ID-er og filnavn. Lenker for tilbakestilling av passord, signerte URL-er og hurtigbuffernøkler inneholder Base64URL uten prosentkoding. En tilfeldig ID på 16 byte blir 22 tegn. På filsystemer som ikke skiller mellom store og små bokstaver, bør du heller bruke Base32, fordi Base64URL er avhengig av store og små bokstaver.

Konvertering mellom Base64 og Base64URL

Begge variantene koder de samme bytene, så konverteringen er bare et tegnbytte: Erstatt + med - og / med _, og fjern deretter = på slutten. For å gå tilbake bytter du tegnene igjen og legger til = til lengden er et multiplum av 4. Dekoderen på denne siden godtar begge alfabetene, med eller uten utfylling.

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

# Python (urlsafe_b64encode beholder utfyllingen)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

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

Spesifikasjon

AlfabetA-Z a-z 0-9 - _
Utdatastørrelse4 tegn per 3 byte (omtrent 133 %)
UtfyllingValgfri, utelates vanligvis
StandardRFC 4648, avsnitt 5
Skiller store og små bokstaverJa

Eksempler

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

Ofte stilte spørsmål

Er Base64URL det samme som å URL-kode en Base64-streng?
Nei. Prosentkoding av standard Base64 gjør +, / og = om til %2B, %2F og %3D, noe som gjør strengen lengre. Base64URL bruker et annet alfabet, så ingen slik koding trengs i det hele tatt. De to formene kan ikke brukes om hverandre uten konvertering.
Skal Base64URL ha utfylling?
Det avhenger av mottakeren. JWT, JSON Web Keys og PKCE krever at utfyllingen utelates, mens urlsafe_b64encode i Python og standard URL-koderen i Java legger den til. Er du i tvil, utelater du den. Denne dekoderen godtar begge formene.
Hvorfor avviser en vanlig Base64-dekoder Base64URL-strengen min?
Strenge standarddekodere godtar ikke - og _, og noen krever utfylling. Bytt ut tegnene og legg til =-tegn slik at lengden blir et multiplum av 4, eller dekod strengen her.
Hvordan sjekker jeg en PKCE code challenge?
Challenge-verdien er BASE64URL(SHA256(code_verifier)) uten utfylling. Dekod den her med Hex som utdata: En riktig verdi gir nøyaktig 32 byte, som du kan sammenligne med SHA-256-hashen til verifikatoren.