Base64 Nedir, Nasıl Çalışır? Kodlama, data URI ve UTF-8 rehberi
Bir resmi HTML'e data:image/png;base64,… olarak gömdüğünüzde, bir API yanıtında uzun bir iVBORw0KGgo… dizisi gördüğünüzde ya da bir JWT'nin bölümlerini çözdüğünüzde karşınıza çıkan hep aynı şeydir: Base64. Bu rehberde Base64'ün ne olduğunu, üç baytı dört karaktere nasıl çevirdiğini, == dolgunun anlamını ve neden şifreleme olmadığını örneklerle anlatıyoruz.
Base64 nedir?
+ ve /) kullanarak metne çeviren bir kodlamadır. Amaç, e-posta ve JSON gibi metin tabanlı ortamlarda ikili veriyi bozulmadan taşımaktır. Geri döndürülebilir bir kodlamadır; şifreleme değildir ve güvenlik sağlamaz.
Bilgisayarlar her şeyi bayt (0–255 arası sayılar) olarak tutar. Ama bazı kanallar yalnızca "yazılabilir" metni güvenle taşır: eski e-posta protokolleri, URL'ler, JSON string'leri ve HTTP başlıkları ikili baytları bozabilir. Base64, bu baytları bu ortamların hepsinde güvenli olan 64 karaktere yeniden yazarak sorunu çözer.
Base64 nasıl çalışır? (3 bayt → 4 karakter)
Somut bir örnekle bakalım. Ada metni üç harften, yani üç bayttan oluşur. Her harfin ASCII kodunu 8 bitlik ikiliğe çevirir, ardından bu 24 biti dörde bölüp her parçayı bir Base64 karakterine eşleriz:
Gördüğünüz gibi 3 bayt (24 bit) tam olarak 4 Base64 karakterine (4 × 6 = 24 bit) sığar; bu yüzden dolgu gerekmedi. Bu dönüşümü DevAraç Base64 aracıyla anında doğrulayabilirsiniz: Ada yazıp Encode'a basın, çıktı QWRh olacaktır.
2⁶ = 64 farklı değer temsil edilebilir. Base64 tablosu bu 64 değeri sırayla A–Z (0–25), a–z (26–51), 0–9 (52–61), + (62) ve / (63) karakterlerine eşler. URL'lerde + ve / sorun çıkardığı için, Base64URL varyantı bunları - ve _ ile değiştirir — JWT'ler bu varyantı kullanır.
"==" dolgu karakteri ne anlama gelir?
= dolgu karakteriyle tamamlanır. Tek = son grubun 2 bayt, çift == ise 1 bayt olduğunu gösterir. Dolgu, çözerken orijinal bayt sayısının doğru bulunmasını sağlar.
Aşağıdaki tablo, giriş uzunluğuna göre dolgunun nasıl değiştiğini gösterir:
| Girdi | Bayt sayısı | Base64 çıktı | Dolgu |
|---|---|---|---|
Ada | 3 | QWRh | yok |
Ad | 2 | QWQ= | tek = |
A | 1 | QQ== | çift == |
Merhaba | 7 | TWVyaGFiYQ== | çift == |
3'e tam bölünen girişlerde dolgu olmaz; kalan 1 bayt için ==, 2 bayt için = eklenir.
Base64 nerede kullanılır?
Base64, ikili verinin "sadece metin" kabul eden bir yere sığması gereken her durumda karşınıza çıkar:
- Data URI: Küçük resim, font veya SVG'yi ayrı dosya yerine
data:image/png;base64,…olarak doğrudan HTML/CSS içine gömmek. - E-posta ekleri: MIME standardı, ikili ekleri Base64 ile kodlar (tarihsel olarak Base64'ün doğduğu yer).
- JSON içinde ikili veri: JSON string tutar; küçük bir dosyayı veya imzayı JSON'a koymak için Base64 kullanılır.
- JWT: Token'ın header ve payload bölümleri Base64URL ile kodlanır (bkz. JWT çözme aracı).
- HTTP Basic Auth:
kullanıcı:parolaikilisi Base64'lenip başlığa konur — dikkat, bu güvenlik değildir.
Neden Base64 şifreleme değildir?
Şifreleme ile kodlamayı ayıran nokta amaç ve anahtar'dır. Kodlama, veriyi farklı bir biçimde temsil eder (amaç: taşınabilirlik). Şifreleme, veriyi anahtarı olmayan birinin okuyamayacağı hale getirir (amaç: gizlilik). Base64 birincidir. HTTP Basic Auth başlığındaki Base64 dizisi, ele geçiren biri tarafından tek adımda kullanıcı adı ve parolaya çözülür — bu yüzden Basic Auth yalnızca HTTPS üzerinde anlamlıdır.
UTF-8 ve Türkçe karakter sorunu
btoa() fonksiyonu yalnızca tek baytlık (Latin-1) karakterlerle çalışır; ç, ş, ğ gibi Türkçe harfler ve emoji için hata verir. Çözüm, metni önce UTF-8 baytlarına çevirip (TextEncoder) sonra Base64'lemektir. DevAraç'ın UTF-8 güvenli modu bunu otomatik yapar.
Türkçe karakterler ve emoji, UTF-8'de birden fazla bayt kaplar (örneğin ç iki bayttır: C3 A7). btoa() bu çok baytlı karakterleri tek başına işleyemez ve "Invalid character" hatası verir. DevAraç Base64 aracında UTF-8 güvenli seçeneği varsayılan olarak açıktır: encode ederken TextEncoder, decode ederken TextDecoder kullanır. Böylece Merhaba dünya! 👋 gibi metinler kayıpsız kodlanıp geri çözülür.
Base64 encode / decode dene
Metni veya küçük bir dosyayı Base64'e çevirin, geri çözün. UTF-8 güvenli, tamamen tarayıcıda yerel; veriniz sunucuya gitmez.
Base64 Aracını Aç →Adım adım: bir metni Base64'e çevirmek
| Adım | İşlem | Sonuç |
|---|---|---|
| 1 | Metni girdi kutusuna yaz | İşleme hazır |
| 2 | UTF-8 güvenli modun açık olduğunu doğrula | Türkçe/emoji korunur |
| 3 | Encode'a bas | Base64 çıktısı üretilir |
| 4 | Geri okumak için Decode'a bas | Orijinal metin geri gelir |
| 5 | Kopyala ile panoya al | Kullanıma hazır |
Base64'ü öğrendiyseniz, ilişkili konulara da göz atın: bir alanı JSON içine gömmeden önce JSON formatlama ve doğrulama rehberi yapının doğruluğunu kontrol etmenize yardımcı olur; güvenlik tarafında ise güçlü şifre üretme ve saklama rehberi, "kodlama gizlilik sağlamaz" ilkesini bir adım öteye taşır.
Sık sorulan sorular
Base64 veriyi büyütür mü, küçültür mü?
Base64URL ile normal Base64 arasındaki fark nedir?
+ ve / kullanır; bunlar URL'lerde özel anlam taşıdığı için Base64URL varyantı onları - ve _ ile değiştirir ve genelde dolgu = kullanmaz. JWT ve URL parametreleri Base64URL kullanır.Base64'lenmiş parola güvenli mi?
btoa() neden Türkçe metinde hata veriyor?
btoa() yalnızca 0–255 aralığındaki (tek baytlık) karakter kodlarını kabul eder. ç, ş, 👋 gibi karakterler çok baytlıdır ve doğrudan işlenemez. Önce TextEncoder ile UTF-8 baytlarına çevirmek gerekir; DevAraç bunu otomatik yapar.Base64 işlemi verilerimi sunucuya gönderir mi?
İlgili rehberler
TextEncoder + btoa ve atob + TextDecoder sarmalı kullanılır; harici kütüphane veya sunucu isteği yoktur. Kaynaklar: RFC 4648 (Base16, Base32, Base64) · RFC 2045 (MIME) · RFC 7519 (JWT / Base64URL). Son güncelleme: 13 Temmuz 2026. İçerik bilgilendirme amaçlıdır; kritik/güvenlik işlerinde sonuçları kendi ortamınızda da doğrulayın.