Vysvětlení kódování Base64: co to je a kdy jej použít
Base64 je ve vývoji webu všude – je zabudován do hlaviček e-mailů, zapečen do datových URI, používá se v autentizačních tokenech a zabalený kolem binárních souborů v textových protokolech. Ale co to vlastně je? A pokud zakóduje data, není to bezpečné? Odpověď zní ne: Base64 je kódování, ne šifrování. Je to způsob, jak reprezentovat binární nebo libovolná data jako prostý ASCII text, nic víc. Pochopení, kdy a proč jej použít, může objasnit spoustu matoucích momentů ve vývoji.
Co je Base64?
Base64 je metoda kódování binárních dat do 64 bezpečných znaků ASCII – písmen A–Z, a–z, číslic 0–9, znamének plus a lomítek. Funguje tak, že vezme binární vstup (ať už text, obrázky nebo nezpracované bajty) a rozdělí ho na 6bitové části. Každý blok se stane indexem do abecedy Base64, takže výstupem je vždy čitelný text. „64“ označuje velikost abecedy: 26 + 26 + 10 + 2 = 64 znaků.
Proč 64? Protože tyto znaky jsou bezpečné téměř ve všech systémech – e-mail, staré terminály, XML, JSON a prostý text. Binární soubor se může při přenosu poškodit, pokud jsou speciální bajty špatně interpretovány; Base64 zaručuje, že výstup přežije beze změny prostřednictvím jakéhokoli textového kanálu. Můžete kódovat a dekódovat Base64 okamžitě ve vašem prohlížeči, aniž byste kamkoli nahrávali svá data.
Base64 není šifrování
Toto je kritický rozdíl: Base64 zakóduje vzhled dat, ale kdokoli jej může zvrátit. Pokud heslo zakódujete pomocí Base64 secret123, stává se c2VjcmV0MTIz — ale to není bezpečné. Dekódování je stejně triviální. Base64 je zmatek pro přenos, nikoli ochrana pro bezpečnost. Pokud potřebujete uchovat data v tajnosti, použijte šifrování (jako AES), nikoli Base64. Base64 je způsob, jak bezpečně odesíláte šifrovaná data prostřednictvím textového kanálu, ale není to samotné šifrování.
Běžná použití Base64
Base64 je standardem v několika reálných scénářích:
- Identifikátory URI dat. Místo odkazování na soubor obrázku můžete obrázek vložit přímo do HTML nebo CSS jako datový URI:
data:image/png;base64,iVBORw0KG…. Vyhnete se tak dodatečnému požadavku HTTP, který je užitečný pro malé ikony nebo v případech, kdy aktiva nelze hostovat samostatně. - Přílohy e-mailu. SMTP (e-mailový protokol) byl navržen pro text. Binární přílohy jsou před odesláním zakódovány pomocí Base64 a po obdržení je váš poštovní klient dekóduje.
- Autentizační tokeny. Mnoho rozhraní API používá Base64 pro tokeny – ne kvůli bezpečnosti, ale protože tokeny jsou často binární data, která je třeba přenášet jako čitelný text v záhlaví nebo URL.
- Vkládání souborů ve formátu JSON nebo XML. Pokud potřebujete do odpovědi JSON API zahrnout binární blob (PDF, tabulku, archiv), Base64 jej zakóduje jako řetězec, který nenaruší strukturu JSON.
Velikost režie: Base64 zvětšuje data
Nevýhoda: Výstup Base64 je asi o 33 % větší než původní binární. Je to proto, že balíte 8 bitů vstupu do 6bitových bloků a padding je potřeba, když délka vstupu není násobkem 3. Pokud tedy vkládáte 300 KB obrázek jako URI dat, verze Base64 má zhruba 400 KB – pomalejší načítání a analyzování. U malých ikon tato režie stojí za uložený požadavek HTTP; u velkých souborů je obvykle lepší je propojit samostatně.
Varianty a související kódování
Standardní použití Base64 + a /, které mají zvláštní význam v adresách URL a názvech souborů. URL-safe Base64 náhražky - a _ místo toho je bezpečný pro použití v cestách a řetězcích dotazů bez kódování procent. Pokud vytváříte vlastní schéma kódování URL, zvažte, zda Kódování URL nebo URL-safe Base64 vyhovuje vašim potřebám.
Base64 je jedno z několika kódování, které řeší různé problémy. Hexadecimální kódování představuje binární jako dva čitelné znaky na bajt (pomalejší k dekódování, ale bez odsazení a čitelné pro člověka), často používané v hash a kontrolních součtech. HTML entity zakódovat speciální znaky jako < a & takže se na webových stránkách zobrazují správně – odlišný problém od libovolného binárního přenosu. Každé kódování je nástrojem pro konkrétní úlohu.