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érete | Csoportok száma | Kitöltött kimenet |
|---|---|---|
| 1 bájt | 1 | 4 karakter |
| 3 bájt | 1 | 4 karakter |
| 4 bájt | 2 | 8 karakter |
| 6 bájt | 2 | 8 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.