Guide
Base64 Dosyaları Neden %33 Büyütür?
Bu bir hata ya da verimsiz bir uygulama değil — %33 ek yük, Base64'ün yaptığı işin doğasında var.
By Buğra SözeriPublished
Base64 hiçbir şeyi sıkıştırmaz — tam tersini yapar. Ham baytları işlemek için hiç tasarlanmamış metin tabanlı kanallardan (e-posta gövdeleri, JSON dizeleri, XML, URL'ler) ikili veriyi güvenle taşımak için var olur ve bu güvenlik yer kaplar: her 3 bayt giriş, 4 karakter çıktıya dönüşür — verinin gerçekte ne olduğundan bağımsız olarak orijinalden kabaca %33 daha büyük olan sabit bir 4:3 oran.
%33'ün arkasındaki matematik
Base64'ün alfabesinde 64 sembol var (A-Z, a-z, 0-9, artı genellikle + ve /olan iki karakter daha) ve 64 = 2⁶ olduğundan, her çıktı karakteri tam olarak 6 bit kodlar. 3 bayt giriş 24 bittir; bu, dört adet 6 bitlik gruba eşit şekilde bölünür — dolayısıyla 3 giriş baytı 4 çıktı karakterine dönüşür. Her karakter daha sonra bir metin baytı olarak saklandığından, 3 bayt ikili veri 4 bayt Base64 metnine dönüşür: 4/3 ≈ 1,333 çarpanı, ya da %33,3'lük bir boyut artışı. Bu uygulamaya özgü değildir — her Base64 kodlayıcının izlediği IETF standardı olan RFC 4648'de bu şekilde tanımlanmıştır.
Dolgu: ekstra bit
| Giriş uzunluğu (bayt) | Kodlanmış uzunluk | Dolgu |
|---|---|---|
| 3'ün katı (örn. 3, 6, 9…) | Tam 4/3 oranı | Yok |
| Kalan 1 (örn. 1, 4, 7…) | Sonraki 4'lü gruba yuvarlanır | == |
| Kalan 2 (örn. 2, 5, 8…) | Sonraki 4'lü gruba yuvarlanır | = |
Giriş uzunluğu 3'ün tam katı olmadığında, son grup toplam çıktı uzunluğunu 4'ün katı olarak tutmak için bir veya iki =karakteriyle doldurulur — bazı çözücüler dizeyi doğru ayrıştırmak için bunu gerektirir, teknik olarak fazlalık bilgi olsa bile. Küçük girişlerde dolgu, ek yükü %33'ün biraz üzerine itebilir, ama bu etki giriş büyüdükçe teorik %33,3'e doğru küçülür.
Ek yükün ödemeye değdiği durumlar
%33'lük maliyet uyumluluk satın alır: Base64 çıktısı düz ASCII'dir, bu yüzden bir JSON dizesine, bir XML özniteliğine, bir URL sorgu parametresine veya bir e-posta gövdesine — hiçbiri ham ikili baytları güvenle tutamayan yerlere — bozulmadan yapıştırılabilir. Bu, küçük görselleri veri URI'si olarak gömmenin veya bir e-postaya dosya eklemenin arkasındaki değiş tokuştur. Gerçekten büyük dosyalar için veya ikili güvenli bir aktarımın zaten var olduğu her yerde (bir dosya yükleme uç noktası, çok parçalı form verisi, bir nesne depolama API'si), Base64'ü atlayıp ham baytları göndermek ek yükten tamamen kaçınır — belirli bir dosyanın kodlandığında tam olarak ne kadar büyüyeceğini kodlamaya karar vermeden önce kontrol etmeniz gerekiyorsa Base64 aracına bakın.
Frequently asked questions
- Neden tam olarak %33 daha büyük, başka bir sayı değil?
- Base64, girişin 3 baytını (24 bit) 4 çıktı karakteri olarak kodlar (her biri 6 bit, çünkü alfabede 64 sembol var). Bu 4:3 oranı, ya da giriş baytlarından tam olarak %33,3 daha fazla karakter demektir — çıktının her karakteri bir metin dosyasında bir bayt olarak saklandığından, dosyanın kendisi de kabaca üçte bir oranında büyür.
- %33 ek yükten kaçınabilir miyim?
- Yalnızca Base64 kullanmayarak — ek yük, rastgele ikili veriyi yazdırılabilir ASCII metin olarak temsil etmenin doğasında vardır. Boyut, ikili güvenli olmayan aktarımdan kaçınmaktan daha önemliyse, veriyi Base64'e kodlamak yerine ham ikiliyi doğrudan gönderin (örneğin çok parçalı form yüklemeleri veya ikili bir API gövdesi).
- Gzip sıkıştırması Base64 ek yükünü iptal eder mi?
- Kısmen. Base64 çıktısı, rastgele ikiliye kıyasla 64 karakterlik alfabesi küçük ve tekrarlı olduğu için oldukça sıkıştırılabilir; bu yüzden gzip genellikle kaybedilen zeminin bir kısmını ama tamamını geri kazanmaz — genellikle yine de yalnızca gzip ile aktarılan ham ikiliden biraz daha büyük kalırsınız.
- Base64 çıktısı bazen neden = veya == ile bitiyor?
- Bu dolgudur. Base64, girişi 3 baytlık gruplar halinde gruplar; giriş uzunluğu 3'ün katı olmadığında, çıktı uzunluğunu bazı çözücülerin doğru ayrıştırmak için gerektirdiği 4'ün katı olarak tutmak için son grup 1 veya 2 '=' karakteriyle doldurulur.
Sources & references
Authoritative references cited by this piece. Verified by Buğra Sözeri on the dates shown and re-checked at every deploy.
- RFC 4648 — Base16, Base32 ve Base64 Veri Kodlamaları — Base64 alfabesini, dolgusunu ve 3 bayttan 4 karaktere gruplandırmayı tanımlayan IETF standardı(as of )
- MDN — Base64 kodlama ve çözme — MDN'in Base64'ün ikili-metin amacı ve boyut ek yükü açıklaması(as of )
Related
Published September 25, 2026