Preskočiť na obsah
TextArray

Vysvetlenie kódovania Base64: čo to je a kedy ho použiť

Blog /

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

`,