Base64 se objevuje v e-mailových přílohách, odpovědích API, certifikátech, tokenech i data URL. Dlouhý řetězec písmen a číslic může vypadat jako šifrovaná zpráva, ale žádné tajemství nevytváří. Jde o způsob, jak libovolné bajty zabalit do omezené sady textových znaků. To je užitečné všude, kde systém spolehlivě přenáší text, zatímco surová binární data by mohl změnit nebo odmítnout.
Původním problémem byly textové kanály
Fotografie, archiv i PDF jsou sekvence bajtů s hodnotami od 0 do 255. Moderní protokoly je často přenesou přímo. Starší poštovní infrastruktura, konfigurační formáty a některá textová pole však zacházejí s částí hodnot jako s řídicími znaky, mění konce řádků nebo očekávají konkrétní charset.
Base64 používá latinská písmena, číslice a několik dalších běžných znaků. Taková reprezentace projde mnoha textově orientovanými vrstvami beze změny. Obsah zůstává stejný, mění se pouze jeho zápis.
Číslo 64 popisuje velikost abecedy
Jeden z 64 znaků může reprezentovat šest bitů, protože šest binárních pozic má 64 kombinací. Kodér načte tři bajty, tedy 24 bitů, a rozdělí je do čtyř šestibitových skupin. Každá skupina určí jeden znak abecedy.
ASCII slovo Man se například zapíše jako TWFu. Bity nebyly skryty ani zabezpečeny. Dekodér je bez klíče sestaví zpět.
Padding označuje neúplný blok
Vstup nemusí mít délku dělitelnou třemi. Pokud na konci zbývá jeden nebo dva bajty, standardní Base64 doplní jeden či dva znaky rovná se. Padding pomáhá popsat, kolik informace v poslední skupině skutečně patří vstupu.
Některé protokoly padding vynechávají, protože jej lze odvodit z délky. Producent a příjemce se ale musí shodnout na kanonické podobě. U podepisovaných dat záleží na přesném textu.
Textová kompatibilita zvětšuje objem
Tři vstupní bajty vytvoří čtyři znaky, takže výsledek je přibližně o třetinu větší. Další režii přidá JSON, zalomení řádků nebo hlavičky. U malého klíče či náhledu to nevadí. U videa nebo zálohy jde o významný náklad.
Aplikace navíc vytváří velký string, ukládá jej a znovu dekóduje. Parser JSON může současně držet HTTP body, text Base64 i výsledný buffer. Skutečná spotřeba paměti je proto mnohem vyšší než původní soubor.
E-mail dobře ukazuje praktický přínos
Historická poštovní infrastruktura byla navržena pro tisknutelné znaky a omezené řádky. MIME kóduje přílohy tak, aby obrázky a dokumenty prošly bez poškození. Čitelné hlavičky popisují typ obsahu a blok Base64 nese bajty souboru.
Podobný princip používá PEM. Certifikát nebo klíč je uložen mezi čitelnou hlavičkou a patičkou. Bezpečnost zajišťuje kryptografický obsah a ochrana klíče, nikoli Base64 obal.
JSON nemá nativní typ pro bajty
JSON zná string, číslo, boolean, pole, objekt a null. Surovou sekvenci bajtů neobsahuje. API proto může malou binární hodnotu zapsat do stringu Base64. Smlouva by měla uvést variantu, maximální velikost a význam dekódovaných dat.
Pro velké soubory je vhodnější multipart upload, binární body nebo přímý přenos do object storage. JSON může nést metadata a odkaz, aniž by do sebe uzavíral celý soubor.
Data URL má smysl u malých zdrojů
Prohlížeč může ikonu nebo font načíst přímo z HTML či CSS. Odpadne samostatný request a zdroj cestuje s dokumentem. U drobných stabilních assetů to může být praktické.
Velký vložený obrázek však zvětší dokument, nelze jej nezávisle cachovat a každá změna zneplatní cache nadřazeného souboru. Rozhodnutí má vycházet z měření, ne z automatického pravidla, že méně requestů je vždy rychlejší.
Base64 neposkytuje důvěrnost
Dekódování umí každá běžná knihovna i prohlížeč. Heslo, token nebo osobní údaj zůstává po zakódování čitelný pro každého, kdo řetězec získá. Jde o změnu notace, ne o šifrování.
Base64 nezajišťuje ani integritu. Útočník může změnit data a vytvořit nový validní řetězec. Důvěrnost vyžaduje šifrování, autenticita podpis nebo MAC a hesla specializované password hashing.
Úspěšné dekódování neznamená bezpečný obsah
Dekodér pouze potvrdí, že vstup odpovídá očekávané abecedě. Výsledné bajty mohou být poškozené, příliš velké nebo škodlivé. Soubor označený jako obrázek může mít jiný formát a archiv může při rozbalení vyčerpat zdroje.
Systém má kontrolovat limit ještě před dekódováním, ověřit typ podle obsahu a výsledek dál považovat za nedůvěryhodný vstup. Base64 je hranice reprezentace, nikoli hranice důvěry.
Charset je samostatné rozhodnutí
Pokud původní obsah tvoří text, znaky se nejprve převedou na bajty, typicky pomocí UTF-8. Teprve tyto bajty se kódují. Když se strany neshodnou na charsetu, Base64 může fungovat správně a dekódovaný text bude přesto poškozený.
Rozhraní má popsat obě vrstvy. Při ladění pomůže prohlédnout bajty v hexadecimálním zápisu dříve, než se obviní samotný Base64 dekodér.
Kódování lze provádět streamovaně
Kodér nemusí držet celý soubor v paměti. Čte bloky a mezi nimi zachová jeden nebo dva zbylé bajty. Padding smí přidat až na skutečném konci streamu.
To pomáhá u velkých příloh, ale neodstraňuje zvětšení výstupu. Pokud protokol podporuje binární stream, přímý přenos je stále jednodušší.
Přísný dekodér odhaluje chyby smlouvy
Některé implementace ignorují whitespace nebo neznámé znaky. U MIME jsou zalomení běžná, v poli API však tolerance může skrýt poškození. Přísný režim odmítá nesprávnou abecedu, délku a padding.
Chyba by měla rozlišit neplatné kódování, překročenou velikost a nepovolený obsah. Automatická oprava může vytvořit jiné bajty, než odesílatel zamýšlel.
Rozhoduje hranice, kterou data překračují
Base64 je vhodné, pokud binární hodnota musí projít textovým polem a režie je přijatelná. Pokud hranice přijímá bajty, je lepší poslat bajty. Bezpečnost a komprese vyžadují vlastní nástroje.
Nejlepší mentální model je obal: obsah se nezmění, balíček je větší, snadno otevřitelný a kompatibilní s dopravou. Právě tato omezená úloha vysvětluje dlouhou životnost Base64.