Base64 Hangi Sorunu Çözer?
Bilgisayarlar her veriyi bayt dizisi olarak tutar. Bir resim, bir PDF ya da bir program dosyası, herhangi bir değer alabilen baytlardan oluşur. Buna karşılık internetin bazı eski protokolleri yalnızca metin taşımak üzere tasarlanmıştır; ikili veriyi olduğu gibi gönderdiğinizde bozulur.
Base64 tam bu boşluğu doldurur: herhangi bir ikili veriyi, yalnızca güvenli metin karakterlerinden (A-Z, a-z, 0-9 ve birkaç işaret) oluşan bir diziye çevirir. Böylece veri, metin taşıyan bir kanaldan bozulmadan geçebilir ve karşı tarafta birebir geri çevrilir.
Bunun bir bedeli vardır: base64'lenmiş veri, orijinalinden yaklaşık üçte bir daha büyüktür. Üç bayt, dört karaktere dönüşür. Bu yüzden base64 gereksiz yere kullanılmamalıdır.
Günlük Kullanım Alanları
Base64 farkında olmadan her gün kullandığınız birçok yerde çalışır. En bilineni e-posta ekleridir: bir fotoğrafı ekleyip gönderdiğinizde, e-posta protokolü metin tabanlı olduğu için dosya arka planda base64'e çevrilerek taşınır.
İkinci yaygın kullanım web sayfalarındaki veri URI'leridir. Küçük bir simgeyi ayrı dosya olarak sunmak yerine doğrudan HTML veya CSS içine gömmek istediğinizde, görsel base64 olarak yazılır. Böylece tarayıcı ek bir istek yapmaz; küçük dosyalarda bu hız kazandırır.
Üçüncüsü, yapılandırma ve API alanlarında ikili veriyi metin bir alanda taşımaktır. Örneğin bir sertifikayı ya da anahtarı JSON içinde göndermek gerektiğinde base64 kullanılır.
- E-posta ekleri (arka planda, siz görmeden).
- Web sayfalarına gömülü küçük görseller (veri URI).
- JSON ve XML içinde ikili veri taşıma.
- Sertifika ve anahtar dosyalarının metin biçimi.
Base64 Şifreleme Değildir
Bu, base64 hakkındaki en yaygın ve en tehlikeli yanılgıdır. Base64 bir kodlamadır, şifreleme değil. Aradaki fark şudur: şifrelemede veriyi geri açmak için bir anahtar gerekir; base64'te ise anahtar yoktur, herkes çözebilir.
Bir parolayı base64'leyip "artık gizli" diye saklamak, kelimeyi tersten yazıp gizlediğini sanmakla aynıdır. Base64 çözücüler her yerde bulunur ve işlem saniye sürmez. Kodlanmış hâli gözünüze anlamsız göründüğü için güvenli sanılır, oysa hiçbir koruma sağlamaz.
Bu yüzden hassas veri için base64'e güvenmeyin. Gizli kalması gereken bilgi şifrelenmeli, iletişim ise HTTPS gibi şifreli bir kanaldan geçmelidir. Base64 bu katmanların içinde taşıma biçimi olarak yer alabilir, ama korumayı sağlayan o değildir.
Ne Zaman Kullanmamalı?
Base64'ün maliyeti veri boyutundaki yüzde otuz üçlük artıştır. Küçük veriler için bu önemsizdir, ama ölçek büyüdükçe gerçek bir sorun hâline gelir.
Örneğin büyük bir görseli web sayfasına base64 olarak gömmek, sayfanın HTML boyutunu şişirir ve ilk yükleme süresini uzatır. Ayrıca gömülü veri ayrı bir dosya olmadığı için tarayıcı tarafından ayrıca önbelleğe alınamaz; her sayfa yüklenişinde yeniden indirilir.
- Birkaç kilobayttan büyük görselleri sayfaya gömmeyin; ayrı dosya olarak sunun.
- Veri tabanında büyük dosyaları base64 metin olarak saklamak yerine dosya depolaması kullanın.
- Gizlilik amacıyla asla kullanmayın; koruma sağlamaz.
- Zaten ikili veri taşıyabilen bir kanalınız varsa base64'e gerek yoktur.
Base64 ile URL Kodlaması Aynı Şey Değil
İki kodlama sık karıştırılır çünkü ikisi de "metni başka bir metne çeviriyor" gibi görünür. Ama farklı sorunları çözerler ve birbirinin yerine kullanılamazlar.
URL kodlaması, bir metni adres çubuğunda güvenle taşınabilir hâle getirir. Boşluk, Türkçe karakter ve soru işareti gibi adreste özel anlamı olan işaretleri yüzde işaretli karşılıklarına çevirir. Amaç, adresin yanlış ayrıştırılmasını önlemektir.
Base64 ise ikili veriyi metne çevirir; amacı adres uyumluluğu değil, metin kanalından ikili veri geçirmektir. Üstelik base64 çıktısı artı ve bölü işaretleri içerebildiği için doğrudan adrese konulamaz.
İkisi bazen birlikte kullanılır: önce veri base64'lenir, sonra sonuç URL kodlamasından geçirilir. Bir belgeyi bağlantı içinde taşımanız gerekiyorsa bu sıra doğrudur; tersi çalışmaz.