Tech Help

Zašto Base64 uvećava datoteke?

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 vrijedi.

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 dodati znakove =. Kodirana dužina je 4 × ceil(n / 3), gdje je n originalna dužina u bajtovima.

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

Ovaj članak objašnjava zašto je izlaz Base64 veći od originalnih bajtova. Nije vodič za sigurnost. Ako trebate kodiranje naspram šifriranja, koristite Base64 nije šifriranje: šta zapravo radi.

Zašto Base64 treba više prostora?

3 bajta su 24 bita. Base64 dijeli 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. Sačuvano kao 1 bajt po ASCII znaku, to je 4 / 3 ≈ 1.333 — uvećanje od oko 33.3%.

  • 3 bajta (24 bita)
  • Podjela 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 dodati malo više na kratkim ulazima.

Jednostavan, provjerljiv primjer

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 posljednji blok od 3 bajta nije bio pun. 1 ulazni bajt koristi dva znaka =; 2 bajta koriste jedan; 3 bajta ne koriste nijedan. Dopuna nije šifriranje ni sigurnosna funkcija.

Da li Base64URL koristi manje prostora?

Base64URL mijenja + u - i / u _, a Kodiranje Base64 izostavlja završne = pri kodiranju. To može skratiti niz za te znakove =. Struktura 3 bajta → 4 znaka ostaje ista, pa Base64URL nije binarni format štedljiviji na prostoru.

Zašto sitni ulazi mogu porasti 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 uvijek 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 sitnoj datoteci taj prefiks može dominirati procentom. Kodiranje Base64 može izdati 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 siguran kao tekst u JSON, emailu i drugim putevima samo za tekst. To je kodiranje binarnog u tekst, ne kompresija.

Da li Base64 komprimuje datoteke?

Ne. Base64 nije format kompresije. Kodirani tekst je obično veći od originalnih bajtova. Ako zatim primijenite gzip ili Brotli na taj tekst, dio viška može se smanjiti — 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 smanjiti 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 poslije gzip.

Treba li čuvati datoteke kao Base64?

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

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 datoteke bolje mogu odgovarati multipart/form-data, objektno skladište ili direktno binarno otpremanje. Nijedan izbor nije uvijek najbolji.

Zašto se Base64 koristi u emailu?

MIME može koristiti Base64 da binarni prilog putuje kao znakovi sigurni za tekst. Isti trošak veličine i dalje važi. To je transportna reprezentacija, ne manja datoteka.

Kada dodatna veličina vrijedi?

Dodatna veličina može vrijediti kada binarno mora sjediti unutar teksta, teret je mali, API zahtijeva Base64 ili trebate Data URL. Za velike medije preferirajte sirove binarne podatke kada sistem to dozvoljava.

Kada treba izbjegavati Base64?

Preskočite ga za velike datoteke, 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 provjeriti

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.

Primjer: kolika će postati datoteka 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. Sač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 koristiti više memorije nego što veličina datoteke sugeriše?

Neka okruženja čuvaju niske sa više od 1 bajta po znaku, a kodiranje/dekodiranje može držati 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 odgovarati. Za veliki teret potražite put binarnog otpremanja. Za tekst siguran 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 odgovarati
  • Veliki teret? Potražiti put binarnog otpremanja
  • Treba tekst siguran za URL? Razmotriti Base64URL
  • Na velikim ulazima očekivati oko 33% više teksta
Base64 kupuje kompatibilnost sa tekstom. Ne kupuje manju datoteku.
Base64 mijenja prostor za kompatibilnost sa tekstom

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

Kodirajte ili dekodirajte Base64 u pregledniku

NEXNARA Kodiranje Base64 kodira i dekodira tekst, i može pretvoriti datoteku u Base64 ili Data URL i vratiti Base64 nazad u datoteku.

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

Datoteke preko 10 MB mogu usporiti karticu (upozorenje). Datoteke preko 32 MB se blokiraju.

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

Zalijepite tekst ili datoteku u Kodiranje Base64 i uporedite originalne bajtove sa kodiranom dužinom.

FAQ

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

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

Da li je Base64 uvijek 33% veći?

Ne. Veliki ulazi se približavaju oko 33.3%. Sitni ulazi mogu porasti 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 datoteke?

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

Da li Base64URL koristi manje prostora?

Može izostaviti 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 datoteke?

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