Mi a Base64?
A Base64 olvasható, hatvannégy karakterrel írja át a bájtokat, hogy az adat átvészelje a szövegre készült csatornákat: e-mail törzset, JSON-sztringet, XML-attribútumot, URL-t. Minden három bájt négy karakterré válik, innen a név — az ábécé hatvannégy szimbólumot tartalmaz, és mindegyik pontosan hat bitet hordoz.
Átviteli kódolás, nem biztonsági intézkedés és nem tömörítési lépés. A kimenet nagyjából egyharmadával nagyobb a bemenetnél, és a sztringgel rendelkező bárki azonnal visszaalakíthatja. Ha az a kérdés, módosult-e az adat, arra a Hash-generátor ad választ; ha titokban kell maradnia, arra a titkosítás való. A Base64 egyiket sem végzi el.
Az egy megjegyzendő szám: három bemeneti bájt négy kimeneti karakterré lesz. Az oldal többi része ebből következik. Négy karakter huszonnégy bitet hordoz, a huszonnégy bit pontosan három bájt, így adat soha nem vész el és nem keletkezik — kivéve a legvégén, ahol a bemenet nem tölti ki az utolsó hármas csoportot.
Az öt ábécé, amelyet az oldal használhat
Az első két sor szabvány, az utolsó három a Unixhoz kötődő konvenció. Mind az öt karakterenként ugyanazt a hat bitet hordozza, és csak abban különböznek, hogy melyik hatvannégy karakter viszi ezt, így ugyanazok a bájtok öt különböző sztringgé válnak. A sztringben nincs jelölve, melyik ábécé állította elő, ezért az ábécé-választó alapértelmezetten a szabványosat választja, az URL-biztos jelölőnégyzet pedig a második sor gyorsgombja.
Hogyan választ az oldal jelöltet: a választó mindkét irányban alapértelmezett. Dekódoláskor a jobb oldali panel magából a sztringből is olvas — a - és az _ csak az URL-biztos ábécéből származhat, a + vagy a / csak a szabványosból, az elején álló / vagy . pedig a két Unix-ábécére utal. Az aktuális bemenetet olvasni képes minden ábécé ott szerepel, megadva, miért jelölt, vagy miért nem.
Sortörés: 76 és 64 karakter
A MIME olyan Base64-et kért, amely e-mailbe illeszkedik úgy, hogy egyik sor sem nő indokolatlanul hosszúra, és soronként 76 karakterben, CRLF-fel elválasztva rögzítette. A tanúsítványokat és kulcsokat csomagoló PEM-fájlok 64-et használnak. A sortörések nem részei az adatnak: a dekódoló eltávolítja őket, és mielőtt bármi mást tenne, összefűzi a sorokat, így a tördelt és a nem tördelt sztring pontosan ugyanazokra a bájtokra dekódolódik. Az utolsó kivételével minden sor négy karakteres csoportok egész számát tartalmazza, ami az összefűzést biztonságossá teszi.
Az oldal szélesség-választás nélkül egy sorban hagyja a kimenetet, a dekódoló pedig sortörésekkel és azok nélkül is elfogad bemenetet. Az oldal által írt sortörések sima sorvégjelek, amelyeket egy szövegmező is tárol; a MIME-levéltörzsek hagyományosan kocsivissza-sorvég párost használnak, és minden használatban lévő dekódoló mindkettőt elfogadja.
A kitöltés, és miért hagyható el
Ha a bemenet nem három bájt többszöröse, az utolsó négykarakteres csoport hiányos, és egy vagy két = karakter tölti ki. Egyáltalán nem hordoznak adatot: csak azt jelzik, hány karakter valódi a négyből. A dekódoló ezt a hosszból is ki tudja számolni, ezért az URL-biztos Base64 hagyományosan elhagyja a kitöltést — az = kellemetlen URL-ben vagy fájlnévben, és egyes rendszerek százalékkódolják.
Az opciósor jelölőnégyzete URL-biztos ábécé kiválasztásakor megtartja a kitöltést. Más nem változik; az adatot hordozó karakterek mindkét esetben azonosak.
Gyakori félreértések
- „A Base64 elrejti az adatot.” Nem rejti el. Ez kulcs nélküli helyettesítés, és az egész lényege, hogy bárki visszafordíthatja. Egy jelszó vagy token Base64-be csomagolása nem változtat azon, hogy ki olvashatja.
- „A Base64 tömörít.” Ennek az ellenkezője igaz: minden három bemeneti bájt négy kimeneti karakterré lesz, így a szöveg harmadával nagyobb, mint az általa hordozott adat.
- „A sortörések az érték részei.” Megjelenítési elemek. Hozzáadásuk vagy eltávolításuk soha nem változtatja meg a visszakapott bájtokat.
- „Az URL-biztos másik kódolást jelent.” Ugyanaz a kódolás két karakter felcserélésével: a
+ --ra, a / _-ra változik, így a sztring URL-útvonalban vagy lekérdezési értékben escapelés nélkül állhat.
- „Ami dekódolható, az biztosan érvényes Base64.” Bármely ábécé-karakterekből álló sztring érvényes Base64, mert a hatbites értékek minden kombinációja érvényes bájtsorozat. A sztring csak a következő lépésben derül ki hibásnak, amikor ezeket a bájtokat ellenőrzik a formátummal szemben, amelynek meg kellett volna felelniük.
- „A kitöltés megmondja, melyik ábécé volt használatban.” Nem mondja meg, és a karakterek legtöbbször sem: a szabványos és az URL-biztos ábécé hatvankét szimbólumban egyezik meg a hatvannégyből, így a rövid sztring gyakran mindkettőben ugyanúgy olvasható.
Gyakori kérdések
Miért végződik a Base64-sztring néha egy =-lel, néha kettővel? Az egy azt jelenti, hogy az utolsó csoport három valódi karaktert hordoz, vagyis két bemeneti bájtot; a kettő azt, hogy kettőt hordoz, vagyis egy bemeneti bájtot. Ha nincs =, a bemeneti hossz három többszöröse volt.
Ábrázolhat a Base64 tetszőleges bináris fájlokat? Igen, és ez a fő felhasználása. Az oldal a bemenetet UTF-8 szövegként kezeli; a nem szöveges adatok kódolásához a Fájl a Base64-hez eszköz nyers bájtokat olvas.
Melyik ábécé használható API-ban? Amelyiket a fogadó oldal dokumentálja. Ha URL-biztost ír elő, az a helyes; ha nem ír elő semmit, és az érték URL-en belül utazik, a kitöltés nélküli URL-biztos ábécé a biztonságos választás.
Kis- és nagybetű-érzékeny a kimenet? Teljesen. Az a és az A különböző értékek, ezért a Base64 sokkal kevésbé viseli el az elgépelt karaktert, mint a Base32 vagy a Crockford Base32.