Koder i dekoder Base64URL

Zamień tekst, bajty szesnastkowe lub pliki na Base64 bezpieczny dla URL i z powrotem. Alfabet używa znaków - i _ zamiast + i /, a dopełnienie jest domyślnie wyłączone, tak jak w JSON Web Token i OAuth PKCE.

Działa w całości w przeglądarce. Nic nie jest wysyłane.

Jak używać

  1. Wybierz „Koduj” lub „Dekoduj”. Wariant bezpieczny dla URL jest wybrany domyślnie, a dopełnienie jest wyłączone.
  2. Wpisz lub wklej tekst, wprowadź bajty szesnastkowe albo otwórz plik. Wynik aktualizuje się na bieżąco podczas pisania.
  3. Włącz „Dopełnienie” tylko wtedy, gdy system odbiorcy wymaga znaków = na końcu.
  4. 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 Base64Base64URL
Wartość 62+-
Wartość 63/_
Dopełnienie=, wymaganezwykle 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_challenge to 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, x i y, 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

AlfabetA-Z a-z 0-9 - _
Rozmiar wyniku4 znaki na 3 bajty (ok. 133%)
DopełnienieOpcjonalne, zwykle pomijane
StandardRFC 4648, sekcja 5
Rozróżnia wielkość literTak

Przykłady

Wejście (UTF-8)Wyjście
Hello, World!SGVsbG8sIFdvcmxkIQ
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

Najczęściej zadawane pytania

Czy Base64URL to to samo co zakodowanie ciągu Base64 do postaci URL?
Nie. Kodowanie procentowe standardowego Base64 zamienia +, / 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?
To zależy od odbiorcy. JWT, JSON Web Key i PKCE wymagają pominięcia dopełnienia, natomiast funkcja 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?
Ścisłe dekodery standardowego Base64 nie akceptują znaków - 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?
Wartość challenge to 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.