[PRZEWODNIK] 8 min czytania

[PRZEWODNIK] Kompletna referencja Base64

Wszystko co musisz wiedzieć o kodowaniu Base64: teoria, implementacja i najlepsze praktyki.

Styczeń 2025 | fundamentals

// 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