Tech Help

Zašto Base64 uvećava fajlove?

Base64 obično uveća binarne podatke za oko trećinu. Pogledajte strukturu 3 bajta u 4 znaka, dopunu, trošak Data URL i kada dodatna veličina vredi.

Kratak odgovor

Base64 obično uveća binarne podatke za oko trećinu jer svaka 3 bajta binarnih podataka predstavlja sa 4 štampajuća Base64 znaka.

Ako dužina ulaza nije tačan umnožak od 3, standardni Base64 sa dopunom može da doda znakove =. Kodirana dužina je 4 × ceil(n / 3), gde je n originalna dužina u bajtovima.

«Oko 33%» opisuje velike ulaze. Na sitnim ulazima procenat može da izgleda mnogo veći zbog dopune. Base64 nije kompresija. Za kodiranje naspram šifrovanja, vidite [Base64 nije šifrovanje: šta zapravo radi](/sr/story/base64-is-not-encryption).

Ovaj članak objašnjava zašto je izlaz Base64 veći od originalnih bajtova. Nije vodič za bezbednost. Ako treba kodiranje naspram šifrovanja, koristite Base64 nije šifrovanje: šta zapravo radi.

Zašto Base64 treba više prostora?

3 bajta su 24 bita. Base64 deli tih 24 bita u 4 grupe od 6 bita. Svaka grupa se mapira na jedan Base64 znak, pa 3 ulazna bajta postaju 4 izlazna znaka. Čuvano kao 1 bajt po ASCII znaku, to je 4 / 3 ≈ 1.333 — uvećanje od oko 33.3%.

  • 3 bajta (24 bita)
  • Podela u 4 grupe od 6 bita
  • Svaka grupa → jedan Base64 znak
  • 4 znaka (često 4 bajta teksta)
Korak 3 bajta → 4 znaka je trošak veličine. Dopuna može da doda malo više na kratkim ulazima.

Jednostavan, proverljiv primer

Ova kodiranja odgovaraju standardnom Base64 sa dopunom.

Man

Man

Base64

TWFu

Man je 3 UTF-8/ASCII bajta. TWFu je 4 znaka: 3 → 4.

Hello

Hello

Base64

SGVsbG8=

Hello je 5 bajtova. SGVsbG8= je 8 znakova, uključujući jedno =. Na malim podacima dopuna čini da procenat izgleda veći od 33%.

Kako se računa veličina Base64?

Za standardni Base64 sa dopunom, encodedLength = 4 × ceil(originalBytes / 3).

Originalni bajtovi Base64 znakovi
14
24
34
48
58
68

1 ili 2 bajta i dalje daju 4 znaka. Koristite formulu, ne fiksnih 33%.

Šta znači dopuna «=»?

Oznaka = pokazuje da poslednji blok od 3 bajta nije bio pun. 1 ulazni bajt koristi dva znaka =; 2 bajta koriste jedan; 3 bajta ne koriste nijedan. Dopuna nije šifrovanje ni bezbednosna funkcija.

Da li Base64URL koristi manje prostora?

Base64URL menja + u - i / u _, a Кодирање Base64 izostavlja završne = pri kodiranju. To može da skrati niz za te znakove =. Struktura 3 bajta → 4 znaka ostaje ista, pa Base64URL nije binarni format štedljiviji na prostoru.

Zašto sitni ulazi mogu da porastu više od 33%?

1 bajt → 4 znaka je uvećanje dužine od 300%. 2 bajta → 4 je 100%. 3 bajta → 4 je oko 33.3%. Kako n raste, dopuna manje utiče i trošak se približava oko 33%. Base64 nije uvek tačno 33% veći.

Zašto je Base64 Data URL još veći?

Data URL dodaje prefiks kao data:image/png;base64, ispred tereta. Na sitnom fajlu taj prefiks može da dominira procentom. Кодирање Base64 može da izda sirovi Base64 ili Data URL; izlaz Data URL koristi standardnu azbuku.

Base64 naspram binarnog: šta je manje?

Sirovi binarni podaci su štedljiviji za prenos i čuvanje. Base64 je veći, ali bezbedan kao tekst u JSON, emailu i drugim putevima samo za tekst. To je kodiranje binarnog u tekst, ne kompresija.

Da li Base64 komprimuje fajlove?

Ne. Base64 nije format kompresije. Kodirani tekst je obično veći od originalnih bajtova. Ako zatim primenite gzip ili Brotli na taj tekst, deo viška može da se smanji — rezultat zavisi od podataka i kompresora. gzip ne uklanja potpuno trošak Base64.

Šta se dešava ako se Base64 komprimuje gzip-om?

HTTP kompresija može da smanji neke ponovljene obrasce u Base64 tekstu. JPEG, PNG ili ZIP često se loše komprimuju i kao sirovi bajtovi, a Base64-pa-gzip i dalje zavisi od slučaja. Nema univerzalnog dodatnog procenta posle gzip.

Treba li čuvati fajlove kao Base64?

Base64 može da stavi binarno u JSON polje, mali ugrađeni resurs, API samo za tekst, kopiranje/lepljenje ili Data URL. Za velike fajlove rastu skladište, memorija i veličina tereta. To nije «nikad ne koristite Base64 za fajlove».

Zašto je Base64 čest u JSON API-jima?

JSON nema nativni tip sirovih binarnih podataka, pa API-ji često stavljaju bajtove u Base64 niz. Za velike fajlove bolje mogu da odgovaraju multipart/form-data, objektno skladište ili direktno binarno otpremanje. Nijedan izbor nije uvek najbolji.

Zašto se Base64 koristi u emailu?

MIME može da koristi Base64 da binarni prilog putuje kao znakovi bezbedni za tekst. Isti trošak veličine i dalje važi. To je transportna reprezentacija, ne manji fajl.

Kada dodatna veličina vredi?

Dodatna veličina može da vredi kada binarno mora da sedi unutar teksta, teret je mali, API zahteva Base64 ili treba Data URL. Za velike medije preferirajte sirove binarne podatke kada sistem to dozvoljava.

Kada treba izbegavati Base64?

Preskočite ga za velike fajlove, uski opseg, česte prenose ili kada binarni put već postoji — situaciono, ne «Base64 je loša praksa».

Dužine Base64 sa dopunom koje možete da proverite

Broj originalnih bajtova i broj znakova standardnog Base64 sa dopunom:

Originalni bajtovi Base64 znakovi
14
24
34
1016
100136
1,0001,336

Svi redovi prate 4 × ceil(n / 3). To su brojevi Base64 znakova.

Primer: koliki će postati fajl od 1,000 bajtova?

4 × ceil(1000 / 3). ceil(333.333…) = 334, i 4 × 334 = 1336. Dakle 1,000 bajtova postaju 1,336 Base64 znakova. Čuvano kao UTF-8/ASCII, svaki znak je obično 1 bajt — ne tretirajte 1,336 kao tačan broj bajtova u memoriji.

Može li Base64 da koristi više memorije nego što veličina fajla sugeriše?

Neka okruženja čuvaju niske sa više od 1 bajta po znaku, a kodiranje/dekodiranje može da drži bafer i nisku zajedno. Upotreba memorije nije tačno dužina u znacima.

Jednostavan vodič za odluku o veličini

Ako sistem prima sirove binarne podatke, preferirajte ih zbog veličine. Ako je dozvoljen samo tekst, Base64 može da odgovara. Za veliki teret potražite put binarnog otpremanja. Za tekst bezbedan u URL, razmotrite Base64URL — proširenje 3-na-4 ostaje.

  • Treba poslati binarne podatke
  • Sirovi binarni podaci dozvoljeni? Preferirati binarno zbog veličine
  • Polje samo za tekst? Base64 može da odgovara
  • Veliki teret? Potražiti put binarnog otpremanja
  • Treba tekst bezbedan za URL? Razmotriti Base64URL
  • Na velikim ulazima očekivati oko 33% više teksta
Base64 kupuje kompatibilnost sa tekstom. Ne kupuje manji fajl.
Base64 menja prostor za kompatibilnost sa tekstom

Base64 nije osmišljen da podatke učini manjim. Olakšava predstavljanje binarnog unutar tekstualnih sistema, a cena je dodatna veličina.

Kodirajte ili dekodirajte Base64 u pregledaču

NEXNARA Кодирање Base64 kodira i dekodira tekst, i može da pretvori fajl u Base64 ili Data URL i vrati Base64 nazad u fajl.

Tekst ide UTF-8 bajtovima, zatim Base64 — ne samo ASCII. Izaberite Standard ili Base64URL. Izlaz fajla može biti sirovi Base64 ili Data URL (standardna azbuka). Neispravan ulaz se odbija. Bajtovi koji nisu UTF-8 treba u fajl, ne u tekstualno dekodiranje.

Fajlovi preko 10 MB mogu da uspore karticu (upozorenje). Fajlovi preko 32 MB se blokiraju.

Kodiranje i dekodiranje dešavaju se u vašem pregledaču. Fajl se ne šalje na NEXNARA server za ovaj alat. Reklame i druge funkcije sajta i dalje koriste mrežu.

Nalepite tekst ili fajl u Кодирање Base64 i uporedite originalne bajtove sa kodiranom dužinom.

FAQ

Zašto Base64 uvećava veličinu fajla?

Mapira 3 bajta (24 bita) na 4 znaka (4 × 6 bita). Čuvano kao tekst, to je za oko trećinu više na velikim ulazima.

Da li je Base64 uvek 33% veći?

Ne. Veliki ulazi se približavaju oko 33.3%. Sitni ulazi mogu da porastu više zbog dopune. Koristite 4 × ceil(n / 3).

Koliko je Base64 veći od binarnog?

Standardna dužina sa dopunom je 4 × ceil(n / 3) znakova. Prefiks Data URL dodaje još.

Da li kompresija Base64 smanjuje veličinu fajla?

Base64 ne komprimuje. gzip ili Brotli na kodiranom tekstu mogu da smanje deo; ne brišu trošak u svakom slučaju.

Da li Base64URL koristi manje prostora?

Može da izostavi dopunu =, pa niz može biti kraći za 0–2 znaka. Struktura kodiranja 3-na-4 je ista.

Treba li koristiti Base64 za velike fajlove?

Samo ako treba tekst. Za velike ili česte prenose binarni put je često manji. Base64 nije uvek pogrešan za API.