Vysvetlenie kódovania Base64: čo to je a kedy ho použiť
Base64 je všade vo webovom vývoji - vložený do hlavičiek e-mailov, zapečený do dátových URI, používaný v autentifikačných tokenoch a zabalený okolo binárnych súborov v textových protokoloch. Ale čo to vlastne je? A ak zakóduje dáta, nie je to bezpečné? Odpoveď je nie: Base64 je kódovanie, nie šifrovanie. Je to spôsob, ako reprezentovať binárne alebo ľubovoľné údaje ako obyčajný text ASCII, nič viac. Pochopenie, kedy a prečo ho použiť, môže objasniť veľa mätúcich momentov vo vývoji.
Čo je Base64?
Base64 je metóda kódovania binárnych údajov do 64 bezpečných znakov ASCII - písmen A–Z, a–z, číslic 0–9, znamienka plus a lomky. Funguje tak, že vezme binárny vstup (či už text, obrázky alebo nespracované bajty) a rozdelí ho na 6-bitové časti. Každý blok sa stáva indexom v abecede Base64, takže výstupom je vždy čitateľný text. „64“ označuje veľkosť abecedy: 26 + 26 + 10 + 2 = 64 znakov.
Prečo 64? Pretože tieto znaky sú bezpečné takmer vo všetkých systémoch - e-mail, staré terminály, XML, JSON a obyčajný text. Binárny súbor sa môže pri prenose poškodiť, ak sú špeciálne bajty nesprávne interpretované; Base64 zaručuje, že výstup prežije nezmenený cez akýkoľvek textový kanál. Môžete kódovať a dekódovať Base64 okamžite vo vašom prehliadači bez toho, aby ste kamkoľvek nahrávali svoje údaje.
Base64 nie je šifrovanie
Toto je kritický rozdiel: Base64 zakóduje vzhľad údajov, ale ktokoľvek ho môže zvrátiť. Ak heslo zakódujete pomocou Base64 secret123, stáva sa c2VjcmV0MTIz - ale to nie je bezpečné. Dekódovanie je rovnako triviálne. Base64 je zmätok pre prenos, nie ochrana pre bezpečnosť. Ak potrebujete uchovať údaje v tajnosti, použite šifrovanie (ako AES), nie Base64. Base64 je spôsob, akým bezpečne odosielate šifrované údaje cez textový kanál, ale nejde o samotné šifrovanie.
Bežné použitie Base64
Base64 je štandardom v niekoľkých scenároch reálneho sveta:
- Identifikátory URI údajov. Namiesto prepojenia na súbor obrázka môžete obrázok vložiť priamo do kódu HTML alebo CSS ako identifikátor URI údajov:
data:image/png;base64,iVBORw0KG…. Vyhnete sa tak dodatočnej požiadavke HTTP, ktorá je užitočná pre malé ikony alebo keď aktíva nemožno hostiť samostatne. - Prílohy e-mailov. SMTP (e-mailový protokol) bol navrhnutý pre text. Binárne prílohy sú pred odoslaním zakódované vo formáte Base64 a po prijatí ich váš poštový klient dekóduje.
- Autentifikačné tokeny. Mnoho rozhraní API používa Base64 pre tokeny - nie kvôli bezpečnosti, ale preto, že tokeny sú často binárne údaje, ktoré je potrebné prenášať ako čitateľný text v hlavičkách alebo adresách URL.
- Vkladanie súborov vo formáte JSON alebo XML. Ak potrebujete do odpovede JSON API zahrnúť binárny blob (PDF, tabuľku, archív), Base64 ho zakóduje ako reťazec, ktorý nenaruší štruktúru JSON.
Veľkosť réžie: Base64 zväčšuje dáta
Nevýhoda: Výstup Base64 je asi o 33% väčší ako pôvodný binárny súbor. Je to preto, že zbaľujete 8 bitov vstupu do 6-bitových častí a výplň je potrebná, keď dĺžka vstupu nie je násobkom 3. Ak teda vkladáte 300 KB obrázok ako dátový URI, verzia Base64 má zhruba 400 KB - pomalšie sa načítava a analyzuje. Pre malé ikony táto réžia stojí za uloženú požiadavku HTTP; pri veľkých súboroch je zvyčajne lepšie ich prepojiť samostatne.
Varianty a súvisiace kódovania
Štandardné použitie Base64 + a /, ktoré majú osobitný význam v adresách URL a názvoch súborov. Bezpečné pre adresy URL Base64 náhradníkov - a _ namiesto toho je bezpečný na použitie v cestách a reťazcoch dotazov bez kódovania percent. Ak vytvárate vlastnú schému kódovania adries URL, zvážte, či kódovanie adresy URL alebo URL-safe Base64 vyhovuje vašim potrebám.
Base64 je jedným z niekoľkých kódovaní, ktoré riešia rôzne problémy. Hexadecimálne kódovanie predstavuje binárne ako dva čitateľné znaky na bajt (pomalšie na dekódovanie, ale bez výplne a čitateľné človekom), často používané v hash a kontrolných súčtoch. HTML entity zakódovať špeciálne znaky, napr < a & takže sa na webových stránkach zobrazujú správne - odlišný problém od ľubovoľného binárneho prenosu. Každé kódovanie je nástrojom pre konkrétnu úlohu.