Base64 URL-safe

Koda och avkoda URL-säker Base64 (Base64url)

Klartext

Base64

Körs lokalt · Säkert att klistra in hemligheter
Base64-utmatning...

Vad är Base64url-kodning?

Base64url är en variant av Base64-kodning som är specifikt utformad för användning i URL:er, filnamn och andra sammanhang där standardtecknen + och / i Base64 orsakar problem. Definierad i RFC 4648 avsnitt 5 ersätter Base64url + med - (bindestreck) och / med _ (understreck), och utelämnar avslutande = utfyllnadstecken. Resultatet är en sträng som kan bäddas in direkt i en URL-frågeparameter, ett filnamn eller en HTTP-header utan ytterligare procentkodning.

Standard-Base64 (RFC 4648 avsnitt 4) använder 64 tecken: A–Z, a–z, 0–9, + och /. Tecknen + och / är reserverade i URL:er: + tolkas som ett blanksteg i frågesträngar (application/x-www-form-urlencoded) och / är en sökvägsseparator. Att använda standard-Base64 inuti en URL kräver därför procentkodning av dessa tecken (%2B, %2F), vilket ökar stränglängden och gör den svårare att läsa. Base64url eliminerar detta problem helt genom att från början använda URL-säkra tecken.

Den mest framträdande användningen av Base64url är i JSON Web Tokens (JWT). Alla tre segment i en JWT — header, payload och signatur — är Base64url-kodade. OAuth 2.0 PKCE-kodverifierare, WebAuthn-utmaningsvärden och många API-tokensystem förlitar sig också på Base64url. Att förstå denna kodning är grundläggande för alla utvecklare som arbetar med autentisering, auktorisering eller kryptografiskt datautbyte.

Varför använda det här Base64url-verktyget?

Konvertera mellan Base64url och text eller binärdata direkt i webbläsaren. Både kodning och avkodning stöds, med automatisk hantering av utfyllnad och teckenbyte. Oavsett om du felsöker en JWT-token, genererar en PKCE-kodutmaning eller skapar URL-säkra identifierare för lösenordsåterställningslänkar, bearbetar det här verktyget allt lokalt i din webbläsare med noll latens och utan serverbegäranden. Ingen data du klistrar in här överförs någonsin utanför din enhet.

Omedelbar konvertering
Utdata uppdateras medan du skriver. Koda text till Base64url eller avkoda Base64url tillbaka till text utan fördröjning — inga formulärinskick eller sidladdningar.
🔗
URL-säkra utdata
Utdata använder bara tecken som är säkra i URL:er, filnamn och HTTP-headers: A–Z, a–z, 0–9, bindestreck och understreck. Ingen procentkodning behövs.
🔒
Sekretessprioriterad bearbetning
All kodning och avkodning körs lokalt i webbläsaren. JWT-tokens, OAuth-hemligheter och API-nycklar du klistrar in här skickas aldrig till någon server.
🏛️
Standardkompatibel
Implementerar RFC 4648 avsnitt 5 exakt: - och _ ersätter + och /, utfyllnad utelämnas. Kompatibel med JWT-bibliotek, OAuth 2.0 PKCE och WebAuthn-implementationer.

Användningsfall för Base64url

JWT-tokeninspektion
Avkoda enskilda JWT-segment (header, payload) för att inspektera anspråk, utgångstider och signeringsalgoritmer utan att importera ett JWT-bibliotek eller verifiera signaturen.
OAuth 2.0 PKCE-flöde
Generera och verifiera PKCE-värden för code_verifier och code_challenge. Metoden code_challenge_method S256 kräver en Base64url-kodad SHA-256-hash av code_verifier.
WebAuthn / FIDO2-integration
WebAuthn-utmaningar, autentiseringsuppgifts-ID och attestationsdata överförs som Base64url-strängar mellan webbläsaren och den förlitande partens server. Avkoda dem för att felsöka registrerings- och autentiseringsflöden.
Generering av API-tokens
Skapa URL-säkra tokens från slumpmässiga bytes för lösenordsåterställningslänkar, e-postverifiering och sessionsidentifierare. Base64url producerar kompakta strängar som fungerar i URL:er utan escape-tecken.
DevOps och CI/CD-pipelines
Lagra binära konfigurationsvärden (certifikat, nycklar) som Base64url-strängar i miljövariabler eller YAML-filer. Till skillnad från standard-Base64 innehåller utdata inga tecken som konflikterar med shell-expansion eller YAML-syntax.
Datateknik
Koda binära identifierare, hashar eller kontrollsummor som Base64url för användning i filnamn, databasnycklar eller CSV-kolumner där + och / skulle bryta parsning eller kräva escape-tecken.

Standard-Base64 vs Base64url

Base64url skiljer sig från standard-Base64 på exakt tre sätt. Kodningsalgoritmen är identisk — bara alfabetet och utfyllnadsbeteendet ändras:

EgenskapStandard (RFC 4648 §4)Base64url (RFC 4648 §5)
Index 62+-
Index 63/_
Padding= (required)Omitted

Dessa tre skillnader innebär att konvertering mellan standard-Base64 och Base64url är trivial: ersätt + med -, / med _, och ta bort avslutande = tecken. I omvänd ordning, ersätt - med +, _ med /, och lägg tillbaka utfyllnad för att göra längden till en multipel av 4. De flesta moderna språk erbjuder inbyggt Base64url-stöd, vilket gör manuell konvertering onödig. Båda konverteringarna är helt reversibla och förlustfria och bevarar den ursprungliga bytesekvensen exakt. Denna interoperabilitet garanteras av RFC 4648-specifikationen, som definierar båda kodningsvarianterna. I praktiken tillhandahåller de flesta moderna programmeringsspråk och ramverk inbyggt Base64url-stöd, så manuell konvertering behövs sällan.

Jämförelsetabell för kodning

Tabellen nedan visar samma indata kodade med standard-Base64 och Base64url. Observera hur utfyllnadstecken (=) tas bort och + / / ersätts med - / _ i den URL-säkra varianten:

IndataStandard-Base64Base64url (utan utfyllnad)
HelloSGVsbG8=SGVsbG8
AQQ==QQ
1+1=2MSsxPTI=MSsxPTI
subject?ref=1c3ViamVjdD9yZWY9MQ==c3ViamVjdD9yZWY9MQ
👍 (thumbs up)8J+RjQ==8J-RjQ

Kodexempel

Hur man kodar och avkodar Base64url-strängar i populära språk. Varje exempel producerar utdata som är säkra att använda i URL:er, filnamn och HTTP-headers:

JavaScript (browser)
// Encode to Base64url
function toBase64url(str) {
  return btoa(unescape(encodeURIComponent(str)))
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/, '')
}
toBase64url('Hello!') // → "SGVsbG8h"

// Decode from Base64url
function fromBase64url(b64url) {
  const b64 = b64url.replace(/-/g, '+').replace(/_/g, '/')
  const pad = (4 - b64.length % 4) % 4
  return decodeURIComponent(escape(atob(b64 + '='.repeat(pad))))
}
fromBase64url('SGVsbG8h') // → "Hello!"
Node.js
// Native base64url support since Node 15.7
const encoded = Buffer.from('Hello!').toString('base64url')
// → "SGVsbG8h"

const decoded = Buffer.from('SGVsbG8h', 'base64url').toString()
// → "Hello!"

// Decode a JWT payload
const jwt = 'eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0...'
const payload = JSON.parse(Buffer.from(jwt.split('.')[1], 'base64url').toString())
// → { sub: "1234567890" }
Python
import base64

# Encode to Base64url (no padding)
encoded = base64.urlsafe_b64encode(b'Hello!').rstrip(b'=').decode()
# → "SGVsbG8h"

# Decode from Base64url (re-add padding)
def b64url_decode(s: str) -> bytes:
    s += '=' * (4 - len(s) % 4)  # restore padding
    return base64.urlsafe_b64decode(s)

b64url_decode('SGVsbG8h')  # → b'Hello!'
Go
package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    // Encode to Base64url (no padding)
    encoded := base64.RawURLEncoding.EncodeToString([]byte("Hello!"))
    fmt.Println(encoded) // → "SGVsbG8h"

    // Decode from Base64url
    decoded, _ := base64.RawURLEncoding.DecodeString("SGVsbG8h")
    fmt.Println(string(decoded)) // → "Hello!"
}

Vanliga frågor

Vad är skillnaden mellan Base64 och Base64url?
Base64url ersätter + med - och / med _ från standard-Base64-alfabetet, och utelämnar avslutande = utfyllnadstecken. Detta gör utdata säkra att använda i URL:er, frågeparametrar, filnamn och HTTP-headers utan ytterligare kodning. Den underliggande algoritmen (uppdelning av bytes i 6-bitarsgrupper mappade till ASCII-tecken) är identisk. I praktiken kan Base64url-strängar visas direkt i URL:er och HTTP-headers utan modifiering, medan standard-Base64-strängar kräver procentkodning (%2B för + och %2F för /) i dessa sammanhang. Detta gör Base64url till det föredragna valet för alla tokens eller identifierare som ska bäddas in i en URL.
Varför använder JWT-tokens Base64url istället för standard-Base64?
JWT:ar skickas ofta i URL-frågeparametrar och HTTP Authorization-headers. Standard-Base64-tecknen + och / skulle behöva procentkodas i URL:er, vilket ökar längden och bryter enkla strängjämförelser. JWT-specifikationen (RFC 7519) kräver Base64url utan utfyllnad för att säkerställa att tokens är kompakta och URL-säkra som standard.
Hur konverterar jag standard-Base64 till Base64url?
Ersätt varje + med -, varje / med _, och ta bort alla avslutande = tecken. I JavaScript: base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''). I Python: base64.urlsafe_b64encode(data).rstrip(b'='). De flesta moderna språk erbjuder också en dedikerad Base64url-kodningsfunktion. Denna konvertering behövs ofta när man integrerar äldre bibliotek som producerar standard-Base64 med moderna system som förväntar sig Base64url, till exempel JWT-validerare, OAuth 2.0-servrar och WebAuthn-förlitande parter.
Är Base64url-kodning reversibel?
Ja, Base64url är helt reversibel. För att avkoda: ersätt - med + och _ med /, lägg tillbaka = utfyllnadstecken för att göra längden till en multipel av 4, avkoda sedan som standard-Base64. De avkodade utdata är byte-för-byte identiska med den ursprungliga inmatningen.
Kan jag använda Base64url för att kryptera data?
Nej. Base64url är en kodning, inte kryptering. Det omvandlar binär data till ett textbaserat format utan sekretess — vem som helst kan avkoda det. Om du behöver skydda data, kryptera det först med en lämplig algoritm (AES, ChaCha20), koda sedan chiffertexten med Base64url för transport. Vanliga krypteringsalgoritmer för detta ändamål inkluderar AES-256-GCM för symmetrisk kryptering och RSA-OAEP för asymmetrisk nyckelomslutning. Kryptera alltid först och Base64url-koda sedan den resulterande chiffertexten för säker transport.
Varför utelämnas utfyllnad i Base64url?
Utfyllnadstecken (=) har inget syfte när avkodaren kan beräkna antalet saknade bytes från stränglängden: (4 - length % 4) % 4 ger den utfyllnad som behövs. Att utelämna utfyllnad gör strängen kortare och undviker = tecken, som skulle behöva procentkodas i URL:er. RFC 4648 avsnitt 5 tillåter uttryckligen utelämnande av utfyllnad i Base64url.
Hur hanterar jag Base64url-strängar med utfyllnad i min kod?
Vissa system producerar Base64url-strängar som behåller = utfyllnad. De flesta avkodare hanterar detta korrekt. Om din avkodare inte gör det, ta bort avslutande = innan avkodning. Omvänt, om ett bibliotek kräver utfyllnad, beräkna och lägg till den: const padded = str + '='.repeat((4 - str.length % 4) % 4). Detta fungerar eftersom antalet utfyllnadstecken är deterministiskt från stränglängden.