Bir dakikada Base64
Bilgisayarlar her şeyi bayt olarak saklar ve bir bayt 256 farklı değer alabilir. E-posta, URL, JSON metinleri ve HTTP başlıkları gibi birçok eski protokol ve format okunabilir metin için tasarlandı; küçük bir güvenli kümenin dışındaki baytları bozabilir ya da reddedebilir. Base64 bu sorunu baytları her yerde sağ kalan karakterlerle yeniden yazarak çözer.
Aşağıdaki araç sen yazdıkça metni Base64'e çevirir, Çöz'e bastığında da geri açar. Metin önce UTF-8'e çevrilir; bu yüzden ç, ğ, ş gibi Türkçe harfler, başka alfabeler ve emoji aynen geri gelir. Durum satırı kaç baytlık metnin kaç baytlık Base64 olduğunu gösterir.
Burada dene: Base64 kodlama
Aracın tam sayfasını açKodlama adım adım nasıl çalışır
Base64 girdiyi 3'er bayt (24 bit) olarak alır ve bu 24 biti 6'şar bitlik dört gruba böler. 6 bit 0 ile 63 arası bir sayı tutar ve her sayı sabit bir alfabeden karşılık bulur: 0-25 arası A-Z, 26-51 arası a-z, 52-61 arası 0-9, 62 artı (+), 63 bölü (/) işaretidir.
Man kelimesini alalım. Baytları 77, 97 ve 110, ikilik sistemde 01001101 01100001 01101110. 6 bitlik parçalara bölünce 010011 010110 000101 101110 olur, yani 19, 22, 5 ve 46; bunlar da T, W, F ve u harflerine karşılık gelir. Yani Man, TWFu olur.
Girdi uzunluğu 3'ün katı değilse son grup doldurulur (padding). Artan tek bayt iki karakter artı == verir, artan iki bayt üç karakter artı = verir. Bu yüzden Ma TWE= olur, M TQ== olur ve Hello (5 bayt) SGVsbG8= olur. Türkçe bir örnek: Çiçek UTF-8'de 7 bayttır (ç ve Ç ikişer bayt) ve w4dpw6dlaw== olarak kodlanır.
Base64 neden yüzde 33 büyütür
Dört çıktı karakteri üç girdi baytının bilgisini taşır; boyut 4/3 katına çıkar, buna en fazla iki dolgu karakteri eklenir. Bazı sistemler ayrıca her 76 karakterde (e-posta, MIME) ya da her 64 karakterde (PEM sertifikaları) satır sonu ekler, bu da birkaç yüzde daha ekler.
| Asıl boyut | Base64 boyutu | 76 karakterlik satırlarla |
|---|---|---|
| 3 bayt | 4 bayt | 4 bayt |
| 1 KB (1.024 bayt) | 1.368 bayt | yaklaşık 1,4 KB |
| 100 KB | yaklaşık 133 KB | yaklaşık 137 KB |
| 1 MB | yaklaşık 1,33 MB | yaklaşık 1,37 MB |
| 10 MB e-posta eki | yaklaşık 13,3 MB | yaklaşık 13,7 MB |
Base64'le nerede karşılaşırsın
- E-posta ekleri: MIME dosyaları 76 karakterlik satırlarla Base64 olarak kodlar. Bu yüzden 20 MB'lık bir dosya, 25 MB mesaj sınırı olan bir e-posta servisinden geri dönebilir: kodlandığında 27 MB'ı geçer.
- Data URI'ler: HTML ya da CSS içine data:image/png;base64, ön ekiyle gömülen görseller, fontlar ve ikonlar.
- HTTP Basic kimlik doğrulama: Authorization: Basic başlığından sonra Base64 ile yazılmış kullanıcıadı:şifre. Başlığı gören herkes okuyabilir, bu yüzden sadece HTTPS üzerinde güvenlidir.
- JSON Web Token'lar: başlık ve içerik Base64url ile kodlanmış JSON'dur; bu yüzden her JWT eyJ ile başlar ({" karakterlerinin kodlanmış hali).
- Sertifikalar ve anahtarlar: PEM dosyaları BEGIN ve END satırları arasında Base64'tür.
- API'ler ve ayar dosyaları: JSON alanlarındaki ikili veriler, Kubernetes secret'ları, ortam değişkenleri ve veritabanı dışa aktarımları. Pazaryeri ve e-fatura entegrasyonlarında PDF ya da XML dosyaları da sık sık Base64 alanı olarak gelir.
Base64 türleri: standart, URL güvenli ve MIME
Standart Base64 (RFC 4648) + ve / kullanır, = ile doldurur. Bu üç karakterin web adreslerinde özel anlamı vardır; bu yüzden eksi ve alt çizgi kullanan, dolguyu genelde atan URL güvenli bir tür vardır, çoğu zaman Base64url denir. JWT'ler ve birçok web API'si bunu kullanır. Araçta bu biçimi almak için URL güvenli seçeneğini aç; çözücü iki biçimi de ve eksik dolguyu da kabul eder.
E-postada kullanılan MIME Base64, en fazla 76 karakterlik satırlara bölünmüş standart Base64'tür. E-posta gövdesi ya da PEM tarzı bir dosya için çıktı gerekiyorsa 76 karakterlik satırlar seçeneğini aç.
Base64 şifreleme değildir
Ortada ne anahtar ne sır var. cGFzc3dvcmQxMjM= metnini gören herkes bir saniyede password123 olarak çözer. Base64 ile kodlanmış şifreleri, token'ları ve ayarları düz metin gibi düşün: herkese açık depolara koyma, güvenmediğin sitelere yapıştırma ve bir şeyi gizlemek için Base64 kullanma. Örneğin Kubernetes secret'ları varsayılan olarak şifrelenmez, sadece Base64 ile kodlanır.
Gizlilik gerekiyorsa gerçek şifreleme kullan (düzgün bir kütüphaneyle AES gibi); şifreli veri metin olarak taşınacaksa onu da ardından Base64 ile kodla.
Çözerken sık yaşanan sorunlar
- Bozuk Türkçe karakterler (ç, ÅŸ gibi): metin başka bir karakter setiyle kodlanmış ya da çözülmüş. JavaScript'teki btoa sadece 255'e kadar olan karakterleri kabul eder ve onları Latin 1 olarak kodlar: ü UTF-8'deki w7w= yerine /A== olur, ğ, ş, ı ya da euro işareti ise hata verir. Bu sayfadaki gibi UTF-8 bilen bir kodlayıcı kullan.
- Geçersiz karakter hatası: metinde boşluk, satır sonu ya da katı bir çözücünün reddettiği URL güvenli karakterler var. Bu araç satır sonlarını yok sayar ve iki alfabeyi de kabul eder.
- Uzunluk 4'ün katı değil: dolgu silinmiş. Uzunluk 4'e bölünene kadar = ekle ya da bunu senin yerine yapan bir çözücü kullan.
- Sonuç rastgele semboller gibi görünüyor: veri ikilidir, örneğin bir görsel, PDF ya da ZIP. Araç bu durumda ikili veri olduğunu söyler, mümkünse dosya türünü tanır ve İndir ile kaydetmene izin verir.
Komut satırında kodlama
Linux'ta base64 dosya.txt kodlar, base64 -d dosya.b64 çözer. macOS'ta aynı base64 komutu var; eski sürümlerde çözmek için -D kullanılır. Windows PowerShell'de [Convert]::ToBase64String([IO.File]::ReadAllBytes("dosya.bin")) bir dosyayı kodlar; Komut İstemi'nde certutil -encode girdi çıktı da çalışır ama BEGIN ve END başlık satırları ekler. Metinle hızlı kontroller için tarayıcıdaki araç daha pratiktir ve veriyi komut geçmişinde bırakmaz.