Mi az a Base64 és mire használható?

Base64 - 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:

Base64 kódtáblázata

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:

  1. Bemenet 3 bájtos (24 bites) csoportokra bontása.
  2. 24 bites csoportok 6 bites csoportokká tördelése.
  3. 6 bites csoportok decimális alakba történő alakítása.
  4. Decimális szám ASCII értékké alakítása.
  5. 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:

  1. Kitöltő karakterek törlése.
  2. ASCII értékek visszaalakítása decimális formátumba.
  3. Decimális értékek 6 bites csoportokba történő visszaállíása.
  4. 6 bites csoportok összefűzése 24 bites csoportokba.
  5. 24 bites csoportok összefűzése az eredeti adat visszaállításához.
Képszerkesztés: