Base64
Jak działa
Base64 przetwarza wejście w grupach po 3 bajty (24 bity). Każda 24-bitowa grupa jest dzielona na cztery 6-bitowe fragmenty (sekstety), a każdy sekstet (wartość 0–63) jest indeksem do 64-znakowego alfabetu kodującego, dając 4 znaki wyjściowe. Gdy długość wejścia nie jest wielokrotnością 3, ostatnią, niepełną grupę uzupełnia się bitami zerowymi, a brakujące pozycje wyjściowe wypełnia się znakiem dopełnienia '=': 1 bajt wejścia daje 2 znaki + '==', a 2 bajty dają 3 znaki + '='. Dekodowanie odwraca ten proces. Wariant base64url stosuje ten sam mechanizm, ale z alfabetem, w którym '+' i '/' zastąpiono '-' i '_'.
Rozwiązany problem
Wiele protokołów i formatów (e-mail, JSON, XML, URL) było zaprojektowanych dla tekstu i nie przenosi bezpiecznie surowych bajtów binarnych — bajty spoza zakresu drukowalnego ASCII bywają zniekształcane, obcinane lub interpretowane jako znaki sterujące. Base64 rozwiązuje ten problem, mapując dowolne dane binarne na bezpieczny, drukowalny podzbiór ASCII, dzięki czemu można je przenieść przez kanał tekstowy i wiernie odtworzyć.
Komponenty
Tablica odwzorowująca wartości 0–63 na znaki drukowalne ASCII. W wariancie standardowym: A–Z (0–25), a–z (26–51), 0–9 (52–61), '+' (62), '/' (63).
Oficjalna
Podział strumienia wejściowego na 24-bitowe grupy i dalej na cztery 6-bitowe sekstety.
Mechanizm obsługi niepełnych grup na końcu wejścia: 1 bajt → 2 znaki + '==', 2 bajty → 3 znaki + '='. Zapewnia, że długość wyjścia jest wielokrotnością 4.
Oficjalna
Implementacja
Base64 jest w pełni odwracalne bez klucza i nie zapewnia poufności. W kontekście AI ma to podwójne znaczenie: dane wrażliwe zakodowane w Base64 pozostają jawne, a filtry treści analizujące tylko czysty tekst mogą przeoczyć złośliwe instrukcje zakodowane w Base64 (prompt-injection/jailbreak).
Użycie alfabetu standardowego ('+','/') tam, gdzie wymagany jest base64url ('-','_'), psuje URL-e, nazwy plików i tokeny JWT.
Różne biblioteki różnie traktują brak '=' oraz białe znaki/łamanie wierszy, co prowadzi do błędów dekodowania między systemami.
Kodowanie zwiększa rozmiar o około 1/3, co przy dużych obrazach/plikach w promptach multimodalnych powiększa zużycie tokenów, pasma i kosztów.
Ewolucja
Jedno z wczesnych ustandaryzowanych zastosowań kodowania Base64 do przenoszenia danych binarnych w poczcie.
Base64 stał się jednym z Content-Transfer-Encoding w MIME, co upowszechniło je jako sposób kodowania załączników e-mail.
Pierwsza specyfikacja zbierająca Base16/Base32/Base64 w jednym dokumencie, niezależnym od MIME.
Zastąpił RFC 3548, ujednolicił rozbieżności implementacyjne i sformalizował wariant URL-safe (base64url).
JSON Web Token oparł kodowanie nagłówka, payloadu i podpisu na base64url, czyniąc ten wariant wszechobecnym w uwierzytelnianiu webowym i API.
Hiperparametry (konfigurowalne osie)
Standard ('+','/') vs URL-safe ('-','_').
Czy dołączać znaki dopełnienia '='. Niektóre profile (np. część zastosowań base64url) pomijają padding.
Opcjonalne dzielenie wyjścia na wiersze (np. 76 znaków w MIME) dla zgodności z e-mailem.
Złożoność obliczeniowa
Złożoność czasowa: O(n). Złożoność przestrzenna: O(n).
Równoległość
Każda 24-bitowa grupa (3 bajty) jest kodowana niezależnie od pozostałych, więc kodowanie/dekodowanie można trywialnie zrównoleglić na blokach.
Wymagania sprzętowe
Base64 wymaga jedynie prostych operacji bitowych i indeksowania tablicy, dostępnych na dowolnym CPU; nie potrzebuje akceleratorów.