Slik bruker du verktøyet
- Velg Kode eller Dekode. Den URL-sikre varianten er forhåndsvalgt, og utfylling er slått av.
- Skriv eller lim inn tekst, skriv inn hex-byte eller åpne en fil. Resultatet oppdateres mens du skriver.
- Slå bare på utfylling hvis mottakersystemet krever =-tegn på slutten.
- 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 Base64 | Base64URL | |
|---|---|---|
| Verdi 62 | + | - |
| Verdi 63 | / | _ |
| Utfylling | =, påkrevd | utelates 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_challengeer 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,xogy, 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
| Alfabet | A-Z a-z 0-9 - _ |
|---|---|
| Utdatastørrelse | 4 tegn per 3 byte (omtrent 133 %) |
| Utfylling | Valgfri, utelates vanligvis |
| Standard | RFC 4648, avsnitt 5 |
| Skiller store og små bokstaver | Ja |
Eksempler
| Inndata (UTF-8) | Utdata |
|---|---|
Hello, World! | SGVsbG8sIFdvcmxkIQ |
Base64.is | QmFzZTY0Lmlz |
你好 | 5L2g5aW9 |
Ofte stilte spørsmål
Er Base64URL det samme som å URL-kode en Base64-streng?
+, / 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?
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?
- 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?
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.