Base64 nedir ve ne işe yarar?
Base64, resim ya da dosya gibi ikili (binary) veriyi sadece harf, rakam ve birkaç işaretten oluşan düz metne çeviren bir kodlamadır. E-postalarda, JWT'lerde ve web adreslerinde sık karşına çıkar.
Neden gerekli?
Bazı sistemler yalnızca düz metin taşıyabilir. E-posta eskiden sadece metin iletirdi, JSON ve URL'ler de ham baytları güvenle taşıyamaz. Base64 her türlü veriyi 64 güvenli karakterle (A-Z, a-z, 0-9, + ve /) yazarak bu sınırı aşar.
Nasıl çalışır?
Veri üçer bayt gruplanır (24 bit) ve bu 24 bit altışar bitlik dört parçaya bölünür. Her parça 64 karakterlik tablodan bir harfe denk gelir. Yani her 3 bayt, 4 karakter olur.
Bu yüzden Base64 veriyi yaklaşık %33 büyütür. Örneğin 1.000.000 baytlık bir dosya 1.333.336 karakterlik Base64 metnine dönüşür. Sondaki = işaretleri, veri 3'ün katı değilse eksik kalanı tamamlayan dolgudur.
Base64 şifreleme değildir
Bunu akılda tut: Base64 bir kodlamadır, şifreleme değil. Anahtar gerektirmez, herkes geri çevirebilir. "Bu veriyi Base64 yaptım, artık güvende" demek yanlıştır. Basic kimlik doğrulamasında kullanıcı adı ve parola Base64 ile gönderilir, ama bu onları korumaz, korumayı HTTPS sağlar.
Nerelerde kullanılır?
- E-posta ekleri (MIME) ve bazı dosya biçimleri.
- Web sayfalarında küçük resimleri doğrudan HTML ya da CSS içine gömmek (data URL).
- JWT gibi token'lar (Base64url biçiminde).
- JSON içinde ikili veri taşımak.
Base64url: adres çubuğu için varyant
Standart Base64'teki + ve / karakterleri web adreslerinde sorun çıkarır. Base64url bunların yerine - ve _ kullanır, sondaki = dolgusunu da atar. Base64 çevirici ikisini de destekler.
Türkçe karakterlerde dikkat
Metni Base64'e çevirirken önce metnin hangi kodlamada baytlara çevrildiği önemlidir. Web'de standart UTF-8'dir. JavaScript'in btoa fonksiyonu Latin-1 dışındaki karakterlerde hata verir, bu yüzden önce UTF-8 baytlarına çevirmek gerekir. Araçlarımız bunu otomatik yapar, ş, ğ ve emoji sorunsuz çalışır.
Base64'ü gizli veriyi saklamak için kullanma. Gizlilik gerekiyorsa gerçek bir şifreleme kullan.