Digitális és informatikai

Base64 méretnövekedése: bájtszám, kitöltés és UTF-8 szöveg

Miért nő meg egy adat Base64-kódoláskor? Bájtokból kiszámolt pontos méret, ékezetes példa, kitöltőjelek és a fájlméretkorlát értelmezése.

Dajka Gábor3 perc olvasás

A Base64-kódolt adat méretét a bemeneti bájtok számából tudod pontosan kiszámítani. A szöveg látható betűinek száma ehhez kevés: egy ékezetes betű UTF-8 kódolással több bájtot foglalhat. Hosszabb adatoknál a növekedés közel egyharmad, rövid szövegnél a kitöltés miatt ennél jóval nagyobb is lehet.

Három bájtból négy karakter

A hagyományos Base64 három, egyenként 8 bites bájtot kezel egy csoportban. Ez 24 bit, amelyet négy, egyenként 6 bitet leíró karakterre oszt. A teljes, egyenlőségjelekkel kitöltött kimenet hossza:

Kimeneti hossz = 4 × felfelé kerekítés(bemeneti bájtszám / 3).

A felfelé kerekítés egész csoportra történik. Egy megmaradó bájthoz két kitöltőjel, két megmaradó bájthoz egy kitöltőjel tartozik. A Base64 szabványa ezt a csoportosítást és a kitöltés feltételeit írja le. A képlet a kódolt adat karaktereire vonatkozik; az esetleges sorvégeket és a köré írt adatmezőt külön kell hozzászámolnod.

Szemléltető példa: a tűz szó

A „tűz” három betű, UTF-8 kódolással azonban négy bájt: a t egy, az ű kettő, a z egy bájtot használ. A változó bájthossz hátterét az UTF-8 szabvány rögzíti.

A méretszámítás így alakul: 4 / 3 = 1,333… csoport; ezt kettőre kerekítjük; 2 × 4 = 8 kimeneti karakter. A konkrét eredmény dMWxeg==. A két záró egyenlőségjel a hiányos utolsó csoportot jelöli, a visszafejtett szöveghez egyik sem ad új betűt.

Ezt a Base64 kódoló és dekódoló két irányában is ellenőrizheted. Először kódold a szót, majd az eredményt dekódold. A jó ellenőrzés végén ugyanazt az ékezetes szöveget kapod vissza.

Bemenet méreteCsoportok számaKitöltött kimenet
1 bájt14 karakter
3 bájt14 karakter
4 bájt28 karakter
6 bájt28 karakter

Egymillió bájtnál mennyi a különbség?

Vegyünk egy szemléltető, pontosan 1 000 000 bájtos adatot. Az osztás 333 333,333… csoportot ad, tehát 333 334 teljes négyes kell. A kimenet 1 333 336 karakter, ASCII-tárolással ugyanennyi bájt. A többlet 333 336 bájt, az eredeti mérethez viszonyítva 33,3336%.

Ha egy fogadó rendszer korlátja a teljes JSON-kérésre vonatkozik, a mezőnév, az idézőjelek és az egyéb adatok is beleszámítanak. Ezért egy egymillió bájtos melléklet nem fér el egy egymillió bájtos teljes kérésben, amikor a mellékletet Base64-ként küldöd.

Az adatmennyiség-átváltó használatakor az MB és MiB különbségét is tartsd meg. A NIST egységtáblája szerint 1 MB = 1 000 000 bájt, 1 MiB = 1 048 576 bájt.

Amit a méretképlet feltételez

A Base64url változatban eltérhet két jel, és egyes felhasználások elhagyják a záró kitöltést. Sortöréseket alkalmazó formátumnál további bájtok jelennek meg. Ezeket a fogadó rendszer előírásából állapítsd meg; ne töröld automatikusan a kimenet végét.

Üres bemenethez üres kimenet tartozik. Hibás kódolt szövegnél a visszafejtés hibát adhat. Különösen ellenőrizd a másoláskor odakerült idézőjelet, szóközt vagy félbeszakadt utolsó csoportot.

A Base64 visszafordítható kódolás, ezért a kódolt szöveg olvashatatlannak tűnő alakja nem jelent titkosítást. Mérettervezéshez az eredeti bájtszámot, átadáshoz a várt változatot, sikeres adatcseréhez pedig a visszafejtett eredményt ellenőrizd.

További cikkek

Kapcsolódó olvasnivalók

Gyorskereső

Kalkulátorok és útmutatók keresése

↑↓ választásEnter megnyitásEsc bezárás