Base64url to wariant kodowania Base64 zaprojektowany z myślą o użyciu w adresach URL, nazwach plików i innych kontekstach, gdzie standardowe znaki Base64 + i / powodują problemy. Zdefiniowany w RFC 4648 Sekcja 5, Base64url zastępuje + przez - (myślnik) i / przez _ (podkreślenie), pomijając końcowe znaki dopełnienia =. Wynikiem jest ciąg, który można osadzić bezpośrednio w parametrze zapytania URL, nazwie pliku lub nagłówku HTTP bez konieczności dodatkowego kodowania procentowego.
Standardowy Base64 (RFC 4648 Sekcja 4) używa 64 znaków: A-Z, a-z, 0-9, + i /. Znaki + i / są zarezerwowane w adresach URL: + jest interpretowany jako spacja w ciągach zapytań (application/x-www-form-urlencoded), a / jest separatorem ścieżki. Użycie standardowego Base64 wewnątrz adresu URL wymaga zatem kodowania procentowego tych znaków (%2B, %2F), co zwiększa długość ciągu i utrudnia jego czytelność. Base64url całkowicie eliminuje ten problem, używając od początku znaków bezpiecznych dla URL.
Najbardziej rozpowszechnione zastosowanie Base64url to JSON Web Tokeny (JWT). Wszystkie trzy segmenty JWT — nagłówek, ładunek i podpis — są kodowane w Base64url. Weryfikatory PKCE OAuth 2.0, wartości challenge WebAuthn oraz wiele schematów tokenów API również opiera się na Base64url. Zrozumienie tego kodowania jest niezbędne dla każdego programisty pracującego z uwierzytelnianiem, autoryzacją lub kryptograficzną wymianą danych.
Dlaczego warto używać tego narzędzia Base64url?
Konwertuj między Base64url a tekstem lub danymi binarnymi bezpośrednio w przeglądarce. Obsługiwane jest zarówno kodowanie, jak i dekodowanie, z automatyczną obsługą dopełnienia i zamiany znaków. Niezależnie od tego, czy debugujesz token JWT, generujesz kod challenge PKCE, czy budujesz identyfikatory bezpieczne dla URL, narzędzie to przetwarza wszystko lokalnie w Twojej przeglądarce bez żadnych opóźnień i bez potrzeby komunikacji z serwerem.
⚡
Natychmiastowa konwersja
Wynik aktualizuje się w trakcie wpisywania. Koduj tekst do Base64url lub dekoduj Base64url z powrotem do tekstu bez żadnego opóźnienia — bez przesyłania formularzy ani przeładowywania strony.
🔗
Wynik bezpieczny dla URL
Wynik używa wyłącznie znaków bezpiecznych w adresach URL, nazwach plików i nagłówkach HTTP: A-Z, a-z, 0-9, myślnik i podkreślenie. Bez kodowania procentowego.
🔒
Przetwarzanie bez opuszczania przeglądarki
Całe kodowanie i dekodowanie odbywa się lokalnie w Twojej przeglądarce. Tokeny JWT, sekrety OAuth i klucze API, które tutaj wklejasz, nigdy nie są przesyłane na żaden serwer.
🏛️
Zgodność ze standardami
Implementuje dokładnie RFC 4648 Sekcja 5: - i _ zastępują + i /, dopełnienie jest pomijane. Kompatybilny z bibliotekami JWT, OAuth 2.0 PKCE i implementacjami WebAuthn.
Przypadki użycia Base64url
Inspekcja tokenów JWT
Dekoduj poszczególne segmenty JWT (nagłówek, ładunek), aby sprawdzić claims, czasy wygaśnięcia i algorytmy podpisywania — bez importowania biblioteki JWT ani weryfikowania podpisu.
Przepływ OAuth 2.0 PKCE
Generuj i weryfikuj wartości code_verifier i code_challenge PKCE. Metoda code_challenge_method S256 wymaga zakodowanego w Base64url skrótu SHA-256 wartości code_verifier.
Integracja WebAuthn / FIDO2
Dane challenge, credential ID i attestation WebAuthn są przesyłane jako ciągi Base64url między przeglądarką a serwerem strony ufającej. Dekoduj je, aby debugować przepływy rejestracji i uwierzytelniania.
Generowanie tokenów API
Twórz bezpieczne dla URL tokeny z losowych bajtów do linków resetowania hasła, weryfikacji e-mail i identyfikatorów sesji. Base64url generuje zwarte ciągi działające w adresach URL bez konieczności stosowania znaków ucieczki.
DevOps i potoki CI/CD
Przechowuj binarne wartości konfiguracyjne (certyfikaty, klucze) jako ciągi Base64url w zmiennych środowiskowych lub plikach YAML. W przeciwieństwie do standardowego Base64, wynik nie zawiera znaków kolidujących z rozwijaniem powłoki ani składnią YAML.
Inżynieria danych
Koduj binarne identyfikatory, skróty i sumy kontrolne w Base64url do użycia w nazwach plików, kluczach baz danych lub kolumnach CSV, gdzie znaki + i / psułyby parsowanie lub wymagały stosowania znaków ucieczki.
Standardowy Base64 a Base64url
Base64url różni się od standardowego Base64 dokładnie w trzech aspektach. Algorytm kodowania jest identyczny — zmienia się tylko alfabet i obsługa dopełnienia:
Cecha
Standard (RFC 4648 §4)
Base64url (RFC 4648 §5)
Index 62
+
-
Index 63
/
_
Padding
= (required)
Omitted
Te trzy różnice oznaczają, że konwersja między standardowym Base64 a Base64url jest prosta: zastąp + przez -, / przez _ i usuń końcowe znaki =. W odwrotnym kierunku zastąp - przez +, _ przez / i dodaj z powrotem dopełnienie, aby długość była wielokrotnością 4. Większość języków programowania oferuje natywną obsługę Base64url, co sprawia, że ręczna konwersja jest zbędna. Obie konwersje są w pełni odwracalne i bezstratne, zachowując oryginalną sekwencję bajtów w niezmienionej postaci.
Tabela porównawcza kodowania
Poniższa tabela pokazuje te same dane wejściowe zakodowane standardowym Base64 i Base64url. Zwróć uwagę, jak znaki dopełnienia (=) są usuwane, a + i / zastępowane przez - i _ w wariancie bezpiecznym dla URL:
Wejście
Standardowy Base64
Base64url (bez dopełnienia)
Hello
SGVsbG8=
SGVsbG8
A
QQ==
QQ
1+1=2
MSsxPTI=
MSsxPTI
subject?ref=1
c3ViamVjdD9yZWY9MQ==
c3ViamVjdD9yZWY9MQ
ð (thumbs up)
8J+RjQ==
8J-RjQ
Przykłady kodu
Jak kodować i dekodować ciągi Base64url w popularnych językach programowania. Każdy przykład generuje wynik bezpieczny do użycia w adresach URL, nazwach plików i nagłówkach HTTP:
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!"
}
Często zadawane pytania
Jaka jest różnica między Base64 a Base64url?
Base64url zastępuje + przez - i / przez _ ze standardowego alfabetu Base64, a także pomija końcowe znaki dopełnienia =. Dzięki temu wynik jest bezpieczny do użycia w adresach URL, parametrach zapytania, nazwach plików i nagłówkach HTTP bez dodatkowego kodowania. Podstawowy algorytm (dzielenie bajtów na 6-bitowe grupy mapowane na znaki ASCII) jest identyczny. W praktyce ciągi Base64url mogą pojawiać się bezpośrednio w adresach URL i nagłówkach HTTP bez żadnych modyfikacji, natomiast standardowe ciągi Base64 wymagają w tych kontekstach kodowania procentowego (%2B dla +, %2F dla /).
Dlaczego tokeny JWT używają Base64url zamiast standardowego Base64?
JWT są często przesyłane w parametrach zapytania URL i nagłówkach HTTP Authorization. Standardowe znaki Base64 + i / musiałyby być kodowane procentowo w adresach URL, co zwiększa długość i psuje proste porównania ciągów. Specyfikacja JWT (RFC 7519) nakazuje stosowanie Base64url bez dopełnienia, aby tokeny były domyślnie zwarte i bezpieczne dla URL.
Jak przekonwertować standardowy Base64 na Base64url?
Zastąp każdy + przez -, każdy / przez _ i usuń wszystkie końcowe znaki =. W JavaScript: base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''). W Python: base64.urlsafe_b64encode(data).rstrip(b'='). Większość nowoczesnych języków oferuje też dedykowaną funkcję kodowania Base64url. Ta konwersja jest często niezbędna podczas integracji starszych bibliotek generujących standardowy Base64 z nowoczesnymi systemami oczekującymi formatu Base64url.
Czy kodowanie Base64url jest odwracalne?
Tak, Base64url jest w pełni odwracalne. Aby zdekodować, zastąp - przez + i _ przez /, dodaj z powrotem znaki dopełnienia =, aby długość była wielokrotnością 4, a następnie zdekoduj jako standardowy Base64. Zdekodowany wynik jest bajt po bajcie identyczny z oryginalnym wejściem.
Czy mogę używać Base64url do szyfrowania danych?
Nie. Base64url to kodowanie, nie szyfrowanie. Przekształca dane binarne w format bezpieczny dla tekstu bez jakiegokolwiek zabezpieczenia — każdy może je zdekodować. Jeśli potrzebujesz chronić dane, najpierw zaszyfruj je odpowiednim algorytmem (AES, ChaCha20), a następnie zakoduj szyfrogramy w Base64url do transportu.
Dlaczego dopełnienie jest pomijane w Base64url?
Znaki dopełnienia (=) nie mają żadnego celu, gdy dekoder może obliczyć brakującą liczbę bajtów na podstawie długości ciągu: (4 - length % 4) % 4 podaje wymagane dopełnienie. Pominięcie dopełnienia skraca ciąg i eliminuje znaki =, które wymagałyby kodowania procentowego w adresach URL. RFC 4648 Sekcja 5 jawnie zezwala na pomijanie dopełnienia w Base64url.
Jak obsługiwać ciągi Base64url z dopełnieniem w kodzie?
Niektóre systemy generują ciągi Base64url zachowujące dopełnienie =. Większość dekoderów obsługuje to poprawnie. Jeśli Twój nie radzi sobie z tym, usuń końcowe = przed dekodowaniem. Z drugiej strony, jeśli biblioteka wymaga dopełnienia, oblicz je i dołącz: const padded = str + '='.repeat((4 - str.length % 4) % 4). Działa to dlatego, że liczba znaków dopełnienia jest deterministyczna na podstawie długości ciągu.