Jak używać
- Wybierz „Koduj” lub „Dekoduj”. Wariant bezpieczny dla URL jest wybrany domyślnie, a dopełnienie jest wyłączone.
- Wpisz lub wklej tekst, wprowadź bajty szesnastkowe albo otwórz plik. Wynik aktualizuje się na bieżąco podczas pisania.
- Włącz „Dopełnienie” tylko wtedy, gdy system odbiorcy wymaga znaków = na końcu.
- Skopiuj wynik lub go pobierz.
Czym jest Base64URL?
Base64URL zdefiniowano w sekcji 5 dokumentu RFC 4648 jako „Base 64 Encoding with URL and Filename Safe Alphabet”, czyli kodowanie Base64 z alfabetem bezpiecznym dla adresów URL i nazw plików. Działa dokładnie tak jak standardowy Base64, po 6 bitów na znak, ale zamienia dwa znaki, które sprawiają problemy w adresach URL i ścieżkach plików:
| Standardowy Base64 | Base64URL | |
|---|---|---|
| Wartość 62 | + | - |
| Wartość 63 | / | _ |
| Dopełnienie | =, wymagane | zwykle pomijane |
W adresie URL znak + może zostać odczytany jako spacja, / oddziela segmenty ścieżki, a = oddziela nazwy parametrów zapytania od ich wartości, dlatego standardowy Base64 trzeba zakodować procentowo, zanim trafi do linku. Base64URL nie wymaga żadnego kodowania znaków. RFC 4648 pozwala pominąć dopełnienie, gdy długość wynika z kontekstu, i większość specyfikacji opartych na Base64URL właśnie tak robi.
Gdzie używa się Base64URL
- JSON Web Token. Nagłówek, ładunek i podpis tokena JWT są zapisane w Base64URL bez dopełnienia (RFC 7515). Token można odczytać za pomocą narzędzia Dekoder JWT.
- OAuth 2.0 PKCE. Wartość
code_challengeto zapisany w Base64URL bez dopełnienia skrót SHA-256 weryfikatora kodu (RFC 7636), dlatego zawsze ma 43 znaki. - JSON Web Key i WebAuthn. Parametry kluczy, takie jak
n,e,xiy, a także wyzwania WebAuthn i identyfikatory poświadczeń są przesyłane w Base64URL. - Tokeny, identyfikatory i nazwy plików. Linki do resetowania hasła, podpisane adresy URL i klucze pamięci podręcznej zawierają Base64URL bez kodowania znaków; 16-bajtowy losowy identyfikator zajmuje 22 znaki. W systemach plików, które nie rozróżniają wielkości liter, lepiej używać Base32, ponieważ w Base64URL wielkość liter ma znaczenie.
Konwersja między Base64 a Base64URL
Oba warianty kodują te same bajty, więc konwersja sprowadza się do zamiany znaków: zastąp + znakiem -, a / znakiem _, po czym usuń końcowe =. Aby wrócić do standardowego Base64, ponownie zamień znaki i dodawaj =, aż długość będzie wielokrotnością 4. Dekoder na tej stronie akceptuje oba alfabety, z dopełnieniem lub bez.
// Node.js 16+
Buffer.from(data).toString('base64url')
Buffer.from(str, 'base64url')
# Python (urlsafe_b64encode zachowuje dopełnienie)
base64.urlsafe_b64encode(data).rstrip(b'=')
// Go
base64.RawURLEncoding.EncodeToString(data)
// Java
Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)
Specyfikacja
| Alfabet | A-Z a-z 0-9 - _ |
|---|---|
| Rozmiar wyniku | 4 znaki na 3 bajty (ok. 133%) |
| Dopełnienie | Opcjonalne, zwykle pomijane |
| Standard | RFC 4648, sekcja 5 |
| Rozróżnia wielkość liter | Tak |
Przykłady
| Wejście (UTF-8) | Wyjście |
|---|---|
Hello, World! | SGVsbG8sIFdvcmxkIQ |
Base64.is | QmFzZTY0Lmlz |
你好 | 5L2g5aW9 |
Najczęściej zadawane pytania
Czy Base64URL to to samo co zakodowanie ciągu Base64 do postaci URL?
+, / i = na %2B, %2F i %3D, przez co ciąg się wydłuża. Base64URL używa innego alfabetu, więc kodowanie znaków w ogóle nie jest potrzebne. Obu form nie można stosować zamiennie bez konwersji.Czy Base64URL powinien mieć dopełnienie?
urlsafe_b64encode w Pythonie i domyślny koder URL w Javie je dodają. W razie wątpliwości lepiej je pominąć; ten dekoder akceptuje obie formy.Dlaczego standardowy dekoder Base64 odrzuca ciąg Base64URL?
- i _, a niektóre wymagają dopełnienia. Zamień znaki i dodaj znaki =, aby długość była wielokrotnością 4, albo zdekoduj ciąg tutaj.Jak sprawdzić wartość code challenge w PKCE?
BASE64URL(SHA256(code_verifier)) bez dopełnienia. Zdekoduj ją tutaj z opcją „Wyjście jako” ustawioną na „Hex”: poprawna wartość daje dokładnie 32 bajty, które można porównać ze skrótem SHA-256 weryfikatora.