Mi az a Base64 és mire használható?
A Base64 egy olyan megoldás, amely bár a legtöbb weboldal forráskódjában megtalálható, az általában fel sem tűnik nekünk, hiszen teljesen észrevétlenül teszi a dolgát. A Base64 alkalmas képek, videók és egyéb médiafájlok megjelenítésére weboldalakon, anélkül, hogy külső fájlok használatára volna szükségünk, illetve adatok ábrázolására, továbbítására olyan környezetekben, ahol bináris fájlok küldése nem lehetséges.
Mi az a Base64?
A Base64 egy olyan adatkódolási séma, amely a bináris adatokat alakít át ASCII karaktersorozatokká.
A Base64 név a "64 alapú" (radix-64/base-64) kifejezésből származik. A Base64 kódolás 64 különböző karaktert használ a bináris adatok kódolására. Ezek a karakterek az ASCII karakterkészletből származnak, és betűket, számokat, illetve két speciális karaktert tartalmaz.
A fő célja, hogy lehetővé tegye a bináris adatok (például képek, videók, hangfájlok) szövegként való tárolását és továbbítását, amely előnyös olyan környezetekben, amelyekben csak a szöveges kommunikáció lehetséges.
Néhány példa a lehetséges felhasználásra:
- E-mail mellékletek: Egyes e-mail rendszerek csak szöveges tartalmakat képesek kezelni, így képek vagy fájlok csatolásánál azok Base64-be kerülnek konvertálásra, hogy szállíthatóak legyenek.
- Bináris adat tárolása JSON-ben, XML-ben vagy adatbázisban: Bináris tartalmak nem tárolhatóak JSON-ben, XML-ben vagy adatbázisokban, ilyenkor érdemes a Base64-kódolt változatukat eltárolni.
- Autentikáció: Mivel a Base64 nem egy titkosítási megoldás, így csak más titkosításokkal karöltve használható szenzitív adatok tárolására.
- Webfejlesztés: Webfejlesztés során a megjelenő médiaelemeke beágyazhatjuk Base64 segítségével is, hogy elkerüljük a különálló fájlokat.
A Base64 kódolás előnyei és hátrányai
A Base64 kódolásnak több előnye van. Először is, lehetővé teszi a bináris adatok egyszerű átvitelét olyan rendszereken, amelyek nem támogatják a bináris adatokat. Ezenfelül a Base64 kódolt médiafájlok használata webes környezetben csökkenti a kérések számát, amely jótékony hatással lehet a weboldalak betöltési sebességére. Ezenfelül segítségével elkerülhetőek a különálló fájlok használata, mely nagyobb átláthatóságot eredményez a fájlstruktúrában.
A Base64 első “hátránya” valójában egy tévedésből ered, sokan úgy vélik, hogy a Base64 egy titkosítási eljárás, amely azonban nem igaz. Így a Base64 önmagában nem használható szenzitív adatok tárolására, például jelszavak “titkosítására”, azonban más valódi titkosításai eljárásokkal már igen. Ennek oka, hogy a Base64 nem titkosítja az adatokat, hanem csak a megjelenésükön módosít, más formátumba alakítja át őket, azaz azokat bárki visszaállíthatja bármilyen titkos kulcs nélkül.
Azonban, amit tényleg a Base64 hátránya, az az átalakítással járó méretnövekedés. Egy átlagos bináris adat Base64-be való alakítása nagyjából ~33% méretnövekedéssel jár. Ez azt jelenti, hogy nem szabad mindent is Base64 formátumba alakítani, mert bár vannak előnyei, az átalakítás többletköltséget eredményez a méretben, mely a szállításban és a tárolásban is meglátszik.
Képek, médiafájlok megjelenítése Base64 formátumban
A Base64 kódolást gyakran használják weboldalak esetében képek és egyéb bináris adatok, például hanganyagok, videók beágyazására a forráskódba.
A Base64 kódolás használatának egyik előnye, hogy a képeket nem kell külön fájlként feltölteni a webszerverre. A Base64 kódolt képeket közvetlenül a HTML kódba lehet ágyazni, ami csökkenti a kérések számát, illetve a weboldal betöltési sebességét.
Azonban ez csak kis mennyiségű és méretű fájlok esetén előnyös, hiszen a nagyobb méretű fájloknál nem csak a méret növekszik, hanem a forráskód is nehezebben lesz átlátható, értelmezhető.
Miért éri meg Base64-kódolt médiafájlokat használni, ha azok méretnövekedéssel járnak? Fontos kiemelni, hogy leginkább kevés mennyiségű és kis méretű fájlok esetében éri meg a Base64 használata. Hiszen az általánosan használt külső fájlos megoldás esetén hiába kisebb a fájl mérete, plusz időbe telik mire az válaszként betöltésre kerül a szerverről. A Base64 fájlok esetében nem kell a fájlt előkeresni a szerverről, mert az már eleve megtalálható a forráskódban. Így ebben az esetben megspórolhatjuk a fájl szerverről való lekérésének idejét. (Természetesen a forráskód mérete ezzel növekszik.)
Ezenfelül a kis méretű fájlok esetén nem túl mérvadó a ~33%-os méretnövekedés, ezt simán kompenzálja az, hogy nem kell a fájlt a szerverről lekérni. Azonban a nagy méretű fájlok esetén már fordul a kocka. Nagyobb fájlok esetén a méretnövekedést már nem kompenzálja az, hogy a fájlt nem a szerverről kell lekérni.
Íme egy példa Base64 kép beágyazására HTML-ben: <img src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAA
XNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAzSURBVChTY3grow
JCsqpA8p2yNoR8b2gJYcCkkRFYKQRhk0ZC1JJ+hyQKR3SyGwuSUQEA7Wx186L0bloAAAAASUVORK5CYII=">
...a kódot a honlap adottságai-, lehetőségei miatt több sorba kellett törnöm, ám a honlap kódjában szóköz és sortörés nélkül van.
A fenti Base64 ezt a képet takarta:
Igen, ezt a pici piros négyszöget, ennél nagyobb képek sokkal hosszabb Base64 kódot eredményeznek.
Base64 karakterek
A Base64 kódolás 64 különböző karaktert használ a bináris adatok ábrázolására. Ezek a karakterek az ASCII karakterkészletből származnak. Mint említettük kis és nagybetűket, számokat, illetve speciális karaktereket tartalmaz.
A Base64 karakterek a következők:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
A fent látható karaktereken kívül még az egyenlőségjel (“=”) is előfordulhat egy Base64 sztringben, de ennek megkülönböztetett szerepe van. A kódolásban nem vesz részt, csak úgynevezett kitöltő (padding) karakterként működik, és csak a Base64 szöveg végén kaphat helyet.
Itt pedig egy Base64 táblázat látható, amelynek az átalakításban van fontos szerepe:
A kódolási/dekódolási folyamat
Kódolási (angolul encoding) folyamatnak nevezzük azt az eljárást, amikor az eredeti bináris adatot (például egy képet) Base64 adattá konvertálunk, míg a dekódolási (decoding) folyamat ennek az ellentéte, azaz az eredeti formába való visszaalakítási folyamat.
A kódolási folyamat a következőképpen zajlik:
- Bemenet 3 bájtos (24 bites) csoportokra bontása.
- 24 bites csoportok 6 bites csoportokká tördelése.
- 6 bites csoportok decimális alakba történő alakítása.
- Decimális szám ASCII értékké alakítása.
- Kitöltő karakter hozzáadása, ha szükséges.
A dekódolási folyamat tulajdonképpen a kódolási folyamat visszafelé történő elvégzése:
- Kitöltő karakterek törlése.
- ASCII értékek visszaalakítása decimális formátumba.
- Decimális értékek 6 bites csoportokba történő visszaállíása.
- 6 bites csoportok összefűzése 24 bites csoportokba.
- 24 bites csoportok összefűzése az eredeti adat visszaállításához.