Base64URL-koder og -dekoder

Konvertér tekst, hexbytes eller filer til URL-sikker Base64 og tilbage. Alfabetet bruger - og _ i stedet for + og /, og udfyldning er som standard slået fra, ligesom i JSON Web Tokens og OAuth PKCE.

Kører udelukkende i din browser. Intet bliver uploadet.

Sådan bruger du værktøjet

  1. Vælg Kod eller Afkod. Den URL-sikre variant er forvalgt, og udfyldning er slået fra.
  2. Skriv eller indsæt tekst, indtast hexbytes, eller åbn en fil. Resultatet opdateres, mens du skriver.
  3. Slå kun Udfyldning til, hvis det modtagende system kræver =-tegn til sidst.
  4. Kopiér resultatet, eller download det.

Hvad er Base64URL?

Base64URL er defineret i afsnit 5 i RFC 4648 som "Base 64 Encoding with URL and Filename Safe Alphabet". Den fungerer præcis som standard-Base64 med 6 bit pr. tegn, men udskifter de to tegn, der skaber problemer i URL'er og filstier:

Standard-Base64Base64URL
Værdi 62+-
Værdi 63/_
Udfyldning=, påkrævetudelades normalt

I en URL kan + blive læst som et mellemrum, / adskiller stisegmenter, og = adskiller nøgler fra værdier i forespørgselsstrengen, så standard-Base64 skal procentkodes, før den kan indgå i et link. Base64URL kræver ingen escaping. RFC 4648 tillader, at udfyldningen udelades, når længden er kendt fra sammenhængen, og de fleste specifikationer, der bygger på Base64URL, gør netop det.

Her bruges Base64URL

  • JSON Web Tokens. Header, payload og signatur i et JWT er hver især Base64URL uden udfyldning (RFC 7515). Læs et token med JWT-dekoderen.
  • OAuth 2.0 PKCE. code_challenge er SHA-256-hashen af code verifier, kodet som Base64URL uden udfyldning (RFC 7636), så den er altid 43 tegn lang.
  • JSON Web Keys og WebAuthn. Nøgleparametre som n, e, x og y samt WebAuthn-challenges og credential-id'er udveksles som Base64URL.
  • Tokens, id'er og filnavne. Links til nulstilling, signerede URL'er og cachenøgler indeholder Base64URL uden escaping; et tilfældigt id på 16 bytes bliver til 22 tegn. På filsystemer, der ikke skelner mellem store og små bogstaver, bør du foretrække Base32, fordi Base64URL afhænger af forskellen på store og små bogstaver.

Konvertering mellem Base64 og Base64URL

Begge varianter koder de samme bytes, så konverteringen er blot en udskiftning af tegn: Erstat + med - og / med _, og fjern derefter afsluttende =. For at gå den anden vej bytter du tegnene tilbage og tilføjer =, indtil længden er et multiplum af 4. Dekoderen på denne side accepterer begge alfabeter, med eller uden udfyldning.

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

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

// Go
base64.RawURLEncoding.EncodeToString(data)

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

Specifikation

AlfabetA-Z a-z 0-9 - _
Outputstørrelse4 tegn pr. 3 bytes (ca. 133 %)
UdfyldningValgfri, udelades normalt
StandardRFC 4648 afsnit 5
Skelner mellem store og små bogstaverJa

Eksempler

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

Ofte stillede spørgsmål

Er Base64URL det samme som at URL-kode en Base64-streng?
Nej. Procentkodning af standard-Base64 gør +, / og = til %2B, %2F og %3D, hvilket gør strengen længere. Base64URL bruger et andet alfabet, så der er slet ikke brug for escaping. De to former kan ikke bruges i flæng uden konvertering.
Skal Base64URL have udfyldning?
Det afhænger af modtageren. JWT, JSON Web Keys og PKCE kræver, at udfyldningen udelades, mens urlsafe_b64encode i Python og standard-URL-koderen i Java tilføjer den. Er du i tvivl, så udelad den; denne dekoder accepterer begge former.
Hvorfor afviser en standard-Base64-dekoder min Base64URL-streng?
Strenge standarddekodere accepterer ikke - og _, og nogle kræver udfyldning. Byt tegnene om, og tilføj =-tegn, så længden bliver et multiplum af 4, eller afkod strengen her.
Hvordan kontrollerer jeg en code challenge i PKCE?
En code challenge er BASE64URL(SHA256(code_verifier)) uden udfyldning. Afkod den her med Hex valgt under Output som: En korrekt værdi giver præcis 32 bytes, som du kan sammenligne med SHA-256-hashen af code verifier.