Tech Help

Kodėl Base64 padidina failus?

Base64 paprastai dvejetainius duomenis padidina apie trečdalį. Pažiūrėkite 3 baitų į 4 ženklus sandarą, užpildą, Data URL sąnaudą ir kada papildomas dydis vertas.

Trumpas atsakymas

Base64 paprastai dvejetainius duomenis padidina apie trečdalį, nes kiekvienus 3 dvejetainių duomenų baitus vaizduoja 4 spausdinamais Base64 ženklais.

Jei įvesties ilgis nėra tikslus 3 kartotinis, standartinis užpildytas Base64 gali pridėti = ženklų. Užkoduotas ilgis yra 4 × ceil(n / 3), kur n — pradinis baitų ilgis.

«Apie 33 %» apibūdina dideles įvestis. Mažose įvestyse procentas dėl užpildo gali atrodyti gerokai didesnis. Base64 nėra glaudinimas. Kodavimą ir šifravimą žr. [Base64 nėra šifravimas: ką jis iš tikrųjų daro](/lt/story/base64-is-not-encryption).

Šis straipsnis paaiškina, kodėl Base64 išvestis didesnė už pradinius baitus. Tai ne saugos vadovas. Jei reikia kodavimo ir šifravimo, naudokite Base64 nėra šifravimas: ką jis iš tikrųjų daro.

Kodėl Base64 reikia daugiau vietos?

3 baitai yra 24 bitai. Base64 tuos 24 bitus skaido į 4 grupes po 6 bitus. Kiekviena grupė vaizduojama vienu Base64 ženklu, tad 3 įvesties baitai tampa 4 išvesties ženklais. Saugant po 1 baitą ASCII ženklui, tai 4 / 3 ≈ 1.333 — apie 33.3 % padidėjimas.

  • 3 baitai (24 bitai)
  • Skaidymas į 4 grupes po 6 bitus
  • Kiekviena grupė → vienas Base64 ženklas
  • 4 ženklai (dažnai 4 teksto baitai)
Žingsnis 3 baitai → 4 ženklai ir yra dydžio kaina. Trumpose įvestyse užpildas gali pridėti dar šiek tiek.

Paprastas, patikrinamas pavyzdys

Šie kodavimai sutampa su standartiniu užpildytu Base64.

Man

Man

Base64

TWFu

Man yra 3 UTF-8/ASCII baitai. TWFu yra 4 ženklai: 3 → 4.

Hello

Hello

Base64

SGVsbG8=

Hello yra 5 baitai. SGVsbG8= yra 8 ženklai, įskaitant vieną =. Mažuose duomenyse užpildas procentą padaro didesnį nei 33 %.

Kaip apskaičiuoti Base64 dydį?

Standartiniam užpildytam Base64, encodedLength = 4 × ceil(originalBytes / 3).

Pradiniai baitai Base64 ženklai
14
24
34
48
58
68

1 ar 2 baitai vis tiek duoda 4 ženklus. Naudokite formulę, ne fiksuotus 33 %.

Ką reiškia «=» užpildas?

Ženklas = rodo, kad paskutinis 3 baitų blokas nebuvo pilnas. 1 įvesties baitas naudoja du = ženklus; 2 baitai — vieną; 3 baitai — nė vieno. Užpildas nėra šifravimas ir ne saugos funkcija.

Ar Base64URL naudoja mažiau vietos?

Base64URL keičia + į - ir / į _, o Koduoti Base64 koduodamas praleidžia galinius =. Tai gali sutrumpinti eilutę tais = ženklais. 3 baitų → 4 ženklų sandara lieka ta pati, tad Base64URL nėra vietos atžvilgiu efektyvesnis dvejetainis formatas.

Kodėl mažos įvestys gali išaugti daugiau nei 33 %?

1 baitas → 4 ženklai yra 300 % ilgio padidėjimas. 2 baitai → 4 yra 100 %. 3 baitai → 4 yra apie 33.3 %. n augant užpildas mažiau svarbus ir sąnauda artėja prie apie 33 %. Base64 ne visada tiksliai 33 % didesnis.

Kodėl Base64 Data URL dar didesnis?

Data URL prieš apkrovą prideda priešdėlį, pavyzdžiui data:image/png;base64,. Mažame faile tas priešdėlis gali valdyti procentą. Koduoti Base64 gali išvesti žalią Base64 arba Data URL; Data URL išvestis naudoja standartinę abėcėlę.

Base64 ir dvejetainiai: kas mažesnis?

Žali dvejetainiai duomenys vietos atžvilgiu efektyvesni perdavimui ir saugojimui. Base64 didesnis, bet saugus kaip tekstas JSON, el. pašte ir kituose tik teksto keliuose. Tai dvejetainio į tekstą kodavimas, ne glaudinimas.

Ar Base64 glaudina failus?

Ne. Base64 nėra glaudinimo formatas. Užkoduotas tekstas paprastai didesnis už pradinius baitus. Jei vėliau tam tekstui taikote gzip ar Brotli, dalis pertekliaus gali susitraukti — rezultatas priklauso nuo duomenų ir glaudintuvo. gzip visiškai nepašalina Base64 sąnaudos.

Kas nutinka, jei Base64 glaudinamas gzip?

HTTP glaudinimas gali sumažinti kai kuriuos pasikartojančius Base64 teksto šablonus. JPEG, PNG ar ZIP dažnai glaudinasi prastai ir kaip žali baitai, o Base64-tada-gzip vis dar priklauso nuo atvejo. Po gzip nėra universalaus papildomo procento.

Ar reikėtų failus saugoti kaip Base64?

Base64 gali sutalpinti dvejetainius duomenis į JSON lauką, mažą įterptą išteklių, tik teksto API, kopijavimą/įklijavimą ar Data URL. Dideliam failui auga saugykla, atmintis ir apkrovos dydis. Tai nėra «niekada nenaudokite Base64 failams».

Kodėl Base64 dažnas JSON API?

JSON neturi gimtojo žalio dvejetainio tipo, tad API dažnai baitus deda į Base64 eilutę. Dideliam failui geriau gali tikti multipart/form-data, objektų saugykla ar tiesioginis dvejetainis įkėlimas. Joks pasirinkimas ne visada geriausias.

Kodėl Base64 naudojamas el. pašte?

MIME gali naudoti Base64, kad dvejetainis priedas keliautų kaip tekstui saugūs ženklai. Ta pati dydžio sąnauda vis tiek galioja. Tai transporto vaizdavimas, ne mažesnis failas.

Kada papildomas dydis vertas?

Papildomas dydis gali būti vertas, kai dvejetainiai turi tilpti tekste, apkrova maža, API reikalauja Base64 arba reikia Data URL. Didelei medijai rinkitės žalius dvejetainius, jei sistema leidžia.

Kada vengti Base64?

Praleiskite jį dideliems failams, siaurai juostai, dažniems perdavimams arba kai dvejetainis kelias jau yra — pagal situaciją, ne «Base64 yra bloga praktika».

Užpildyto Base64 ilgiai, kuriuos galite patikrinti

Pradinių baitų skaičiai ir standartinio užpildyto Base64 ženklų skaičiai:

Pradiniai baitai Base64 ženklai
14
24
34
1016
100136
1,0001,336

Visos eilutės seka 4 × ceil(n / 3). Tai Base64 ženklų skaičiai.

Pavyzdys: kokio dydžio taps 1,000 baitų failas?

4 × ceil(1000 / 3). ceil(333.333…) = 334, ir 4 × 334 = 1336. Taigi 1,000 baitų tampa 1,336 Base64 ženklais. Saugant UTF-8/ASCII, kiekvienas ženklas paprastai 1 baitas — nelaikykite 1,336 tiksliu baitų skaičiumi atmintyje.

Ar Base64 gali naudoti daugiau atminties, nei siūlo failo dydis?

Kai kurios aplinkos eilutes saugo daugiau nei po 1 baitą ženklui, o kodavimas/dekodavimas gali laikyti buferį ir eilutę kartu. Atminties naudojimas nėra tiksliai ilgis ženklais.

Paprastas dydžio sprendimo vadovas

Jei sistema priima žalius dvejetainius, rinkitės juos dėl dydžio. Jei leidžiamas tik tekstas, Base64 gali tikti. Didelei apkrovai ieškokite dvejetainio įkėlimo kelio. URL saugiam tekstui apsvarstykite Base64URL — 3-į-4 plėtra lieka.

  • Reikia siųsti dvejetainius duomenis
  • Žali dvejetainiai leidžiami? Rinktis dvejetainius dėl dydžio
  • Tik teksto laukas? Base64 gali tikti
  • Didelė apkrova? Ieškoti dvejetainio įkėlimo kelio
  • Reikia URL saugaus teksto? Apsvarstyti Base64URL
  • Didelėse įvestyse tikėtis apie 33 % daugiau teksto
Base64 perka suderinamumą su tekstu. Jis neperka mažesnio failo.
Base64 keičia vietą į suderinamumą su tekstu

Base64 nesukurta duomenims sumažinti. Jis palengvina dvejetainių vaizdavimą tekstinėse sistemose, o kaina — papildomas dydis.

Kodavimas ir dekodavimas Base64 naršyklėje

NEXNARA Koduoti Base64 koduoja ir dekoduoja tekstą, gali failą paversti Base64 arba Data URL ir Base64 grąžinti atgal į failą.

Tekstas eina UTF-8 baitais, tada Base64 — ne tik ASCII. Pasirinkite Standard arba Base64URL. Failo išvestis gali būti žalias Base64 arba Data URL (standartinė abėcėlė). Netinkama įvestis atmetama. Ne UTF-8 baitams reikia failo, ne teksto dekodavimo.

Failai virš 10 MB gali sulėtinti skirtuką (įspėjimas). Failai virš 32 MB blokuojami.

Kodavimas ir dekodavimas vyksta jūsų naršyklėje. Failas šiam įrankiui nesiunčiamas į NEXNARA serverį. Skelbimai ir kitos svetainės funkcijos vis dar naudoja tinklą.

Įklijuokite tekstą arba failą į Koduoti Base64 ir palyginkite pradinius baitus su užkoduotu ilgiu.

FAQ

Kodėl Base64 padidina failo dydį?

Jis 3 baitus (24 bitus) vaizduoja 4 ženklais (4 × 6 bitai). Saugant kaip tekstą, didelėse įvestyse tai apie trečdalį daugiau.

Ar Base64 visada 33 % didesnis?

Ne. Didelės įvestys artėja prie apie 33.3 %. Mažos įvestys dėl užpildo gali išaugti daugiau. Naudokite 4 × ceil(n / 3).

Kiek Base64 didesnis už dvejetainius?

Standartinis užpildytas ilgis yra 4 × ceil(n / 3) ženklų. Data URL priešdėlis prideda dar.

Ar Base64 glaudinimas sumažina failo dydį?

Base64 neglaudina. gzip ar Brotli užkoduotam tekstui gali dalį suspausti; jie ne visais atvejais ištrina sąnaudą.

Ar Base64URL naudoja mažiau vietos?

Jis gali praleisti = užpildą, tad eilutė gali būti 0–2 ženklais trumpesnė. 3-į-4 kodavimo sandara ta pati.

Ar naudoti Base64 dideliems failams?

Tik jei reikia teksto. Dideliam ar dažnam perdavimui dvejetainis kelias dažnai mažesnis. Base64 API ne visada netinka.