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í:
Vlastnost
Standardní (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:
Vstup
Standardní Base64
Base64url (bez doplnění)
Hello
SGVsbG8=
SGVsbG8
A
QQ==
QQ
1+1=2
MSsxPTI=
MSsxPTI
subject?ref=1
c3ViamVjdD9yZWY9MQ==
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:
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í.