[PRZEWODNIK] Kompletna referencja Base64
Wszystko co musisz wiedzieć o kodowaniu Base64: teoria, implementacja i najlepsze praktyki.
// CZYM JEST BASE64?
Base64 to schemat kodowania z binarnego do tekstu, który reprezentuje dane binarne używając 64 znaków ASCII. Jest zaprojektowany do kodowania danych binarnych, które muszą być przechowywane i przesyłane przez media zaprojektowane dla danych tekstowych.
Zestaw znaków Base64 zawiera A-Z, a-z, 0-9 oraz dwa dodatkowe znaki (zwykle + i /), plus = do wypełniania.
// JAK DZIAŁA BASE64
Kodowanie Base64 działa poprzez pobieranie danych binarnych i konwertowanie ich na ciąg znaków ASCII. Proces obejmuje:
1. Podział wejścia na 6-bitowe fragmenty (Base64 używa 6 bitów na znak) 2. Mapowanie każdej wartości 6-bitowej na znak w alfabecie Base64 3. Dodanie wypełnienia znakami '=' jeśli potrzeba
// Przykład: Kodowanie 'Man' do Base64
// 'M' = 01001101, 'a' = 01100001, 'n' = 01101110
// Połączone: 010011010110000101101110
// Podzielone na grupy 6-bitowe: 010011 010110 000101 101110
// Wartości dziesiętne: 19, 22, 5, 46
// Znaki Base64: T, W, F, u
// Wynik: 'TWFu'
// TYPOWE ZASTOSOWANIA
- > Osadzanie obrazów w HTML/CSS (data URI)
- > Kodowanie danych binarnych dla JSON API
- > Załączniki e-mail (kodowanie MIME)
- > Przechowywanie danych binarnych w bazach danych
- > Tokeny uwierzytelniania i klucze API
- > Bezpieczna transmisja danych przez URL
// IMPLEMENTACJA W JAVASCRIPT
Nowoczesne przeglądarki oferują wbudowane funkcje kodowania i dekodowania Base64:
Do kodowania tekstu do Base64 użyj btoa() (binary to ASCII). Do dekodowania Base64 do tekstu użyj atob() (ASCII to binary).
// Kodowanie tekstu do Base64
const text = 'Hello, World!';
const encoded = btoa(text);
console.log(encoded); // SGVsbG8sIFdvcmxkIQ==
// Dekodowanie Base64 do tekstu
const decoded = atob(encoded);
console.log(decoded); // Hello, World!
// Dla ciągów Unicode użyj TextEncoder/TextDecoder
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const unicodeText = 'Hello, 世界!';
const bytes = encoder.encode(unicodeText);
const base64 = btoa(String.fromCharCode(...bytes));
console.log(base64);
// KWESTIE BEZPIECZEŃSTWA
Base64 to NIE szyfrowanie ani bezpieczeństwo. To po prostu kodowanie do reprezentacji danych. Ważne uwagi o bezpieczeństwie:
Nigdy nie używaj samego Base64 do ochrony wrażliwych danych. Zawsze waliduj wejście Base64 aby zapobiec atakom iniekcji. Pamiętaj, że Base64 zwiększa rozmiar danych o ~33%.
- > Base64 jest łatwo odwracalny - nie zapewnia bezpieczeństwa
- > Zawsze waliduj i oczyszczaj wejście Base64
- > Używaj odpowiedniego szyfrowania dla wrażliwych danych
- > Rozważ warianty Base64 bezpieczne dla URL w aplikacjach webowych
- > Uważaj na ataki padding oracle w niektórych kontekstach
// NAJLEPSZE PRAKTYKI
- > Używaj URL-safe Base64 dla aplikacji webowych (zamień + na -, / na _)
- > Zawsze prawidłowo obsługuj wypełnienie
- > Waliduj długość i znaki wejściowe
- > Rozważ kompresję przed kodowaniem dla dużych danych
- > Używaj strumieniowania dla bardzo dużych zbiorów danych
- > Implementuj odpowiednią obsługę błędów dla nieprawidłowego wejścia