Base64 URL-safe

Kódování a dekódování URL-bezpečného Base64 (Base64url)

Prostý text

Base64

Běží lokálně · Bezpečné pro vkládání tajných údajů
Výstup Base64...

Co je Base64url kódování?

Base64url je variantou kódování Base64 navržená specificky pro použití v URL, názvech souborů a dalších kontextech, kde standardní znaky Base64 + a / způsobují problémy. Definovaná v RFC 4648 Section 5, Base64url nahrazuje + za - (pomlčka) a / za _ (podtržítko) a vynechává koncové znaky doplnění =. Výsledkem je řetězec, který lze vložit přímo do URL parametru dotazu, názvu souboru nebo HTTP hlavičky bez nutnosti dalšího procentového kódování.

Standardní Base64 (RFC 4648 Section 4) používá 64 znaků: A–Z, a–z, 0–9, + a /. Znaky + a / jsou v URL vyhrazeny: + se v řetězcích dotazu interpretuje jako mezera (application/x-www-form-urlencoded) a / je oddělovač cesty. Použití standardního Base64 uvnitř URL proto vyžaduje procentové kódování těchto znaků (%2B, %2F), což prodlužuje řetězec a ztěžuje jeho čitelnost. Base64url tento problém zcela eliminuje tím, že od začátku používá URL-safe znaky.

Nejrozšířenějším použitím Base64url jsou JSON Web Tokeny (JWT). Všechny tři segmenty JWT — hlavička, payload a podpis — jsou kódovány Base64url. Ověřovače OAuth 2.0 PKCE, hodnoty WebAuthn challenge a mnoho schémat API tokenů také spoléhají na Base64url. Pochopení tohoto kódování je nezbytné pro každého vývojáře, který pracuje s autentizací, autorizací nebo kryptografickou výměnou dat.

Proč použít tento nástroj Base64url?

Převádějte mezi Base64url a textem nebo binárními daty přímo v prohlížeči. Podporovány jsou jak kódování, tak dekódování, s automatickým zpracováním doplnění a záměnou znaků. Ať už ladíte JWT token, generujete PKCE code challenge nebo vytváříte URL-safe identifikátory, tento nástroj zpracovává vše lokálně ve vašem prohlížeči bez jakéhokoli zpoždění a bez nutnosti komunikace se serverem.

Okamžitý převod
Výstup se aktualizuje během psaní. Kódujte text na Base64url nebo dekódujte Base64url zpět na text bez jakéhokoli zpoždění — bez odesílání formulářů nebo opětovného načítání stránky.
🔗
URL-safe výstup
Výstup používá pouze znaky bezpečné v URL, názvech souborů a HTTP hlavičkách: A–Z, a–z, 0–9, pomlčka a podtržítko. Procentové kódování není potřeba.
🔒
Zpracování v prohlížeči
Veškeré kódování a dekódování probíhá lokálně ve vašem prohlížeči. JWT tokeny, OAuth tajemství a API klíče, které sem vložíte, nejsou nikdy přenášeny na žádný server.
🏛️
Shoda se standardem
Implementuje RFC 4648 Section 5 přesně: - a _ nahrazují + a /, doplnění je vynecháno. Kompatibilní s JWT knihovnami, OAuth 2.0 PKCE a implementacemi WebAuthn.

Případy použití Base64url

Kontrola JWT tokenů
Dekódujte jednotlivé segmenty JWT (hlavičku, payload) pro kontrolu claims, časů vypršení platnosti a podpisových algoritmů bez nutnosti importovat JWT knihovnu nebo ověřovat podpis.
OAuth 2.0 PKCE tok
Generujte a ověřujte hodnoty PKCE code_verifier a code_challenge. Metoda code_challenge_method S256 vyžaduje Base64url kódovaný SHA-256 hash hodnoty code_verifier.
Integrace WebAuthn / FIDO2
Data WebAuthn challenge, credential ID a attestation jsou přenášena jako řetězce Base64url mezi prohlížečem a serverem relying party. Dekódujte je pro ladění registračních a autentizačních toků.
Generování API tokenů
Vytvářejte URL-safe tokeny z náhodných bajtů pro odkazy na obnovení hesla, ověření e-mailu a identifikátory relací. Base64url produkuje kompaktní řetězce, které fungují v URL bez escapování.
DevOps a CI/CD pipeline
Ukládejte binární konfigurační hodnoty (certifikáty, klíče) jako řetězce Base64url v proměnných prostředí nebo YAML souborech. Na rozdíl od standardního Base64 výstup neobsahuje znaky, které by kolidovaly s rozvojem shellu nebo syntaxí YAML.
Datové inženýrství
Kódujte binární identifikátory, haše nebo kontrolní součty jako Base64url pro použití v názvech souborů, databázových klíčích nebo sloupcích CSV, kde by znaky + a / narušily parsování nebo vyžadovaly escapování.

Standardní Base64 vs Base64url

Base64url se od standardního Base64 liší právě ve třech aspektech. Kódovací algoritmus je identický — mění se pouze abeceda a chování doplnění:

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

Tyto tři rozdíly znamenají, že převod mezi standardním Base64 a Base64url je triviální: nahraďte + za -, / za _ a odstraňte koncové znaky =. V opačném směru nahraďte - za +, _ za / a znovu přidejte doplnění, aby délka byla násobkem 4. Většina jazyků poskytuje nativní podporu Base64url, takže ruční převod není nutný. Oba převody jsou plně reverzibilní a bezeztrátové, přičemž původní sekvence bajtů je zachována přesně. Tato vzájemná kompatibilita je zaručena standardem RFC 4648.

Srovnávací tabulka kódování

Tabulka níže ukazuje stejné vstupy kódované standardním Base64 a Base64url. Všimněte si, jak jsou znaky doplnění (=) odstraněny a + / / nahrazeny - / _ ve variantě URL-safe:

VstupStandardní Base64Base64url (bez doplnění)
HelloSGVsbG8=SGVsbG8
AQQ==QQ
1+1=2MSsxPTI=MSsxPTI
subject?ref=1c3ViamVjdD9yZWY9MQ==c3ViamVjdD9yZWY9MQ
👍 (thumbs up)8J+RjQ==8J-RjQ

Příklady kódu

Jak kódovat a dekódovat řetězce Base64url v populárních jazycích. Každý příklad produkuje výstup bezpečný pro použití v URL, názvech souborů a HTTP hlavičkách:

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!"
}

Často kladené dotazy

Jaký je rozdíl mezi Base64 a Base64url?
Base64url nahrazuje + za - a / za _ ze standardní abecedy Base64 a vynechává koncové znaky doplnění =. Výstup je tak bezpečný pro použití v URL, parametrech dotazu, názvech souborů a HTTP hlavičkách bez dalšího kódování. Základní algoritmus (rozdělení bajtů na 6bitové skupiny mapované na znaky ASCII) je identický. V praxi lze řetězce Base64url vkládat přímo do URL a HTTP hlaviček bez úprav, zatímco standardní řetězce Base64 vyžadují v těchto kontextech procentové kódování (%2B pro +, %2F pro /).
Proč JWT tokeny používají Base64url místo standardního Base64?
JWT jsou často přenášeny v URL parametrech dotazu a HTTP hlavičkách Authorization. Standardní znaky Base64 + a / by musely být v URL procentově zakódovány, což by prodloužilo délku a narušilo jednoduché porovnávání řetězců. Specifikace JWT (RFC 7519) nařizuje Base64url bez doplnění, aby tokeny byly kompaktní a URL-safe od základu.
Jak převést standardní Base64 na Base64url?
Nahraďte každý + za -, každý / za _ a odstraňte všechny koncové znaky =. V JavaScript: base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''). V Python: base64.urlsafe_b64encode(data).rstrip(b'='). Většina moderních jazyků také poskytuje vyhrazenou funkci pro kódování Base64url. Tento převod je běžně potřebný při integraci starších knihoven produkujících standardní Base64 s moderními systémy, které očekávají Base64url.
Je kódování Base64url reverzibilní?
Ano, Base64url je plně reverzibilní. Pro dekódování nahraďte - za + a _ za /, přidejte zpět znaky doplnění =, aby délka byla násobkem 4, a poté dekódujte jako standardní Base64. Dekódovaný výstup je bajt po bajtu identický s původním vstupem.
Mohu Base64url použít pro šifrování dat?
Ne. Base64url je kódování, nikoli šifrování. Transformuje binární data do textového formátu bez jakéhokoli utajení — kdokoli je může dekódovat. Pokud potřebujete chránit data, nejprve je zašifrujte správným algoritmem (AES, ChaCha20) a poté Base64url zakódujte šifrovaný text pro přenos.
Proč je doplnění v Base64url vynecháno?
Znaky doplnění (=) neslouží žádnému účelu, pokud dekodér může vypočítat počet chybějících bajtů z délky řetězce: (4 - délka % 4) % 4 udává potřebné doplnění. Vynechání doplnění zkracuje řetězec a zabraňuje výskytu znaků =, které by musely být v URL procentově zakódovány. RFC 4648 Section 5 výslovně povoluje vynechání doplnění v Base64url.
Jak v kódu zacházet s řetězci Base64url obsahujícími doplnění?
Některé systémy produkují řetězce Base64url, které si zachovávají doplnění =. Většina dekodérů to správně zvládne. Pokud váš dekodér ne, odstraňte koncové znaky = před dekódováním. Naopak, pokud knihovna vyžaduje doplnění, vypočítejte ho a přidejte: const padded = str + '='.repeat((4 - str.length % 4) % 4). Toto funguje, protože počet znaků doplnění je deterministický z délky řetězce. Spolehlivý postup: doplňte řetězec znaky = tak, aby jeho délka byla násobkem 4 — to funguje bez ohledu na to, zda doplnění již přítomno je nebo není.