Kodare och avkodare för Base64URL

Konvertera text, hexbyte eller filer till URL-säker Base64 och tillbaka. Alfabetet använder - och _ i stället för + och /, och utfyllnad är avstängd som standard, precis som i JSON Web Tokens och OAuth PKCE.

Körs helt i din webbläsare. Inget laddas upp.

Så använder du verktyget

  1. Välj Koda eller Avkoda. Den URL-säkra varianten är förvald med utfyllnad avstängd.
  2. Skriv eller klistra in text, ange hexbyte eller öppna en fil. Resultatet uppdateras medan du skriver.
  3. Slå bara på utfyllnad om det mottagande systemet kräver =-tecken i slutet.
  4. Kopiera resultatet eller ladda ned det.

Vad är Base64URL?

Base64URL definieras i avsnitt 5 i RFC 4648 som "Base 64 Encoding with URL and Filename Safe Alphabet". Den fungerar precis som standard-Base64, med 6 bitar per tecken, men byter ut de två tecken som ställer till problem i URL:er och filsökvägar:

Standard-Base64Base64URL
Värde 62+-
Värde 63/_
Utfyllnad=, obligatoriskutelämnas oftast

I en URL kan + tolkas som ett mellanslag, / avgränsar sökvägssegment och = skiljer nycklar från värden i frågesträngen, så standard-Base64 måste procentkodas innan den kan läggas i en länk. Base64URL kan användas som den är. RFC 4648 tillåter att utfyllnaden utelämnas när längden framgår av sammanhanget, och de flesta specifikationer som bygger på Base64URL gör just det.

Var Base64URL används

  • JSON Web Tokens. Huvud, nyttolast och signatur i en JWT är var för sig Base64URL utan utfyllnad (RFC 7515). Läs en token med JWT-avkodaren.
  • OAuth 2.0 PKCE. code_challenge är SHA-256-hashen av kodverifieraren (code verifier) i Base64URL-form utan utfyllnad (RFC 7636), så den är alltid 43 tecken lång.
  • JSON Web Keys och WebAuthn. Nyckelparametrar som n, e, x och y, liksom utmaningar och credential-ID:n i WebAuthn, utbyts som Base64URL.
  • Tokens, ID:n och filnamn. Återställningslänkar, signerade URL:er och cachenycklar innehåller Base64URL utan att något behöver kodas om; ett slumpmässigt ID på 16 byte blir 22 tecken. På filsystem som inte skiljer på versaler och gemener är Base32 ett bättre val, eftersom Base64URL är skiftlägeskänslig.

Konvertera mellan Base64 och Base64URL

Båda varianterna kodar samma byte, så konverteringen är bara ett teckenbyte: ersätt + med - och / med _, och ta sedan bort avslutande =. För att gå tillbaka byter du tecknen igen och lägger till = tills längden är en multipel av 4. Avkodaren på den här sidan accepterar båda alfabeten, med eller utan utfyllnad.

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

# Python (urlsafe_b64encode behåller utfyllnaden)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

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

Specifikation

AlfabetA-Z a-z 0-9 - _
Utdatastorlek4 tecken per 3 byte (cirka 133 %)
UtfyllnadValfri, utelämnas oftast
StandardRFC 4648 avsnitt 5
SkiftlägeskänsligJa

Exempel

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

Vanliga frågor

Är Base64URL samma sak som att URL-koda en Base64-sträng?
Nej. Procentkodning av standard-Base64 gör om +, / och = till %2B, %2F och %3D, vilket gör strängen längre. Base64URL använder ett annat alfabet, så ingenting behöver kodas om. De två formerna kan inte bytas mot varandra utan konvertering.
Ska Base64URL ha utfyllnad?
Det beror på mottagaren. JWT, JSON Web Keys och PKCE kräver att utfyllnaden utelämnas, medan Pythons urlsafe_b64encode och Javas standardkodare för URL:er lägger till den. Utelämna den om du är osäker; den här avkodaren accepterar båda formerna.
Varför avvisar en vanlig Base64-avkodare min Base64URL-sträng?
Strikta standardavkodare accepterar inte - och _, och vissa kräver utfyllnad. Byt tecknen och lägg till =-tecken så att längden blir en multipel av 4, eller avkoda strängen här.
Hur kontrollerar jag en PKCE code challenge?
Utmaningen är BASE64URL(SHA256(code_verifier)) utan utfyllnad. Avkoda den här och välj Hex under Utdata som: ett korrekt värde ger exakt 32 byte, som du kan jämföra med SHA-256-hashen av verifieraren.