Base64 možno nájsť v e-mailových prílohách, JSON odpovediach, certifikátoch, tokenoch aj data URL. Výsledok vyzerá ako dlhý nezrozumiteľný reťazec, preto sa niekedy mylne považuje za šifrovanie. V skutočnosti iba prepíše ľubovoľnú postupnosť bajtov pomocou malej skupiny tlačiteľných znakov. Takýto obal je užitočný na hranici, ktorá spoľahlivo prenáša text, no surové binárne hodnoty by mohla odmietnuť, skrátiť alebo interpretovať ako riadiace znaky.
Base64 vznikol pre obmedzenia prenosu
Obrázok, archív aj PDF sú iba bajty s hodnotami od 0 do 255. Mnohé dnešné protokoly ich dokážu posielať priamo. Staršie poštové systémy, textové konfiguračné formáty a niektoré databázové či API polia však očakávajú znaky v určitom kódovaní. Môžu meniť konce riadkov alebo mať problém s nulovým bajtom.
Base64 používa písmená, číslice a niekoľko presne určených symbolov. Dáta preto prejdú textovo orientovanou infraštruktúrou bez toho, aby sa zmenil ich obsah. Mení sa reprezentácia, nie pôvodná informácia.
Šesť bitov sa zmestí do jedného zo 64 znakov
Šesť binárnych pozícií má 64 možných kombinácií. Kodér vezme tri vstupné bajty, teda 24 bitov, rozdelí ich na štyri šesťbitové skupiny a každú nahradí znakom abecedy. Preto tri bajty vytvoria štyri textové znaky.
Napríklad bajty ASCII slova Man sa zapíšu ako TWFu. Dekodér nepotrebuje heslo ani kľúč. Podľa tej istej verejnej tabuľky znaky zmení späť na pôvodné bity.
Padding popisuje neúplný posledný blok
Dĺžka vstupu nemusí byť násobkom troch. Ak zostane jeden alebo dva bajty, štandardný zápis doplní na konci jeden či dva znaky rovná sa. Padding neobsahuje ďalšie dáta; označuje, koľko bitov poslednej skupiny bolo skutočne súčasťou vstupu.
Niektoré protokoly padding vynechávajú, lebo sa dá dopočítať z dĺžky. Rozhranie však musí určiť jednu očakávanú podobu. Dve textové reprezentácie rovnakých bajtov môžu vytvoriť odlišný cache key alebo podpísanú správu.
Textová kompatibilita stojí približne tretinu objemu
Pomer troch vstupných bajtov ku štyrom znakom znamená asi 33-percentné zväčšenie. Ďalšiu réžiu môže pridať JSON, MIME zalamovanie alebo obálka protokolu. Pri malom kryptografickom kľúči to neprekáža, pri videu alebo zálohe ide o veľký náklad na sieť aj úložisko.
Spotreba pamäte býva ešte vyššia. Aplikácia môže súčasne držať celé HTTP body, Base64 string a dekódovaný binárny buffer. Pri veľkom uploade teda nestačí počítať iba rozdiel veľkosti na disku.
MIME ukazuje dôvod, prečo formát prežil
E-mailová infraštruktúra bola historicky postavená na tlačiteľných znakoch a obmedzených riadkoch. MIME oddelí popis typu prílohy od Base64 bloku, ktorý nesie jej bajty. Obrázok alebo dokument tak môže prejsť cez množstvo serverov bez poškodenia.
Podobne vyzerá PEM zápis certifikátov a kľúčov. Čitateľná hlavička označí typ objektu a vnútro nesie Base64. Kryptografickú bezpečnosť poskytuje samotný certifikát, podpis a ochrana privátneho kľúča, nie textový obal.
JSON potrebuje dohodu, ako zapísať bajty
JSON pozná string, číslo, boolean, pole, objekt a null, ale nemá natívny typ byte array. Menšia binárna hodnota sa preto často prenáša ako Base64 string. Dokumentácia musí uviesť variant abecedy, padding, maximálnu veľkosť a význam dekódovaného obsahu.
Veľký súbor je vhodnejšie poslať cez multipart, binárne HTTP body alebo priamo do object storage. JSON môže preniesť metadata, identifikátor a očakávaný hash bez toho, aby do jedného dokumentu vložil celý súbor.
Data URL je kompromis medzi requestom a cache
Malú ikonu možno vložiť priamo do HTML alebo CSS. Prehliadač nemusí vykonať samostatný request a asset sa doručí spolu s dokumentom. Pri drobnom jednorazovom zdroji to môže byť praktické.
Veľký obrázok však nafúkne rodičovský súbor, nedá sa nezávisle cachovať a jeho zmena zneplatní celý dokument. Rozhodnutie má vychádzať z merania konkrétnej stránky, nie z pravidla, že každý ušetrený request automaticky zrýchľuje web.
Kódovanie nevytvára dôvernosť ani integritu
Heslo, API token alebo osobný údaj zostáva po Base64 čitateľný každému, kto reťazec získa. Dekóder je súčasťou bežných knižníc a funguje bez tajomstva. Base64 preto nemožno použiť ako náhradu šifrovania.
Formát tiež neodhalí úmyselnú zmenu. Útočník upraví bajty a vytvorí nový validný text. Dôvernosť rieši šifrovanie, autenticitu podpis alebo MAC a heslá špecializované password hashing algoritmy.
Úspešné dekódovanie neoveruje obsah
Dekodér potvrdí nanajvýš to, že znaky a padding zodpovedajú zvolenej variante. Výsledkom môže byť poškodený súbor, malware, príliš veľký buffer alebo archív, ktorý po rozbalení vyčerpá zdroje. MIME type deklarovaný klientom nie je dôkaz skutočného formátu.
Služba má kontrolovať maximálnu encoded dĺžku ešte pred alokáciou, overiť typ podľa obsahu a s dekódovanými bajtmi ďalej pracovať ako s nedôveryhodným vstupom. Hranica reprezentácie nie je hranicou dôvery.
Pri texte treba poznať aj charset
Ak vstupom nie sú priamo bajty súboru, ale text, znaky sa najprv prevedú na bajty, obyčajne pomocou UTF-8. Až potom nastupuje Base64. Dve strany sa môžu správne dohodnúť na Base64 a napriek tomu dostať poškodenú diakritiku, ak použijú odlišný charset.
API kontrakt má pomenovať obe vrstvy. Pri diagnostike pomôže porovnať dekódované bajty v hexadecimálnom tvare a až potom riešiť ich interpretáciu ako text.
Streaming znižuje pamäť, nie sieťovú réžiu
Kodér môže čítať vstup po blokoch a medzi iteráciami si ponechať najviac dva zvyšné bajty. Padding pridá až po skutočnom konci streamu. Rovnakým spôsobom možno postupne dekódovať veľkú prílohu.
Streaming je dôležitý tam, kde protokol Base64 vyžaduje, ale nezmenší výsledok. Ak rozhranie podporuje binárny stream, priamy prenos ostáva jednoduchší a lacnejší.
Prísny parser odhaľuje porušenú zmluvu
MIME dekodér môže oprávnene ignorovať zalomenia riadkov. Rovnaká tolerancia v jednom JSON poli však môže skryť poškodenie alebo nečakanú transformáciu proxy. Strict režim má odmietnuť nesprávnu abecedu, dĺžku a padding podľa protokolu.
Base64 je najlepšie chápať ako prepravný obal: je väčší než obsah, každý ho vie otvoriť a pomáha iba v doprave, ktorá prijíma text. Keď hranica zvláda bajty, treba poslať bajty; bezpečnostné a kompresné požiadavky patria iným nástrojom.