Skip to content
Bloga Dönün
Eğitimler

Base64 Kodlama Nedir? Yeni Başlayanlar İçin Rehber

Base64 ile yeni mi tanışıyorsunuz? Base64 kodlamanın ne olduğunu, adım adım nasıl çalıştığını ve geliştiricilerin neden kullandığını öğrenin — net örneklerle yeni başlayanlara uygun bir giriş.

8 dakika okuma

Base64 Kodlamayı Anlamak

Base64 ile yeni mi tanışıyorsunuz? Doğru yerdesiniz. Yeni başlayanlara uygun bu rehber, Base64’ün ne olduğunu, adım adım nasıl çalıştığını ve bir geliştirici olarak nerelerde karşınıza çıkacağını anlatıyor. MIME kodlaması, Data URL’ler, performans optimizasyonu ve güvenlik konuları gibi ileri düzey başlıklar için İleri Düzey Base64 Rehberimize bakın.

Base64 kodlama, modern yazılım geliştirmenin her köşesinde kullanılan temel bir tekniktir. İster HTML içine görsel gömüyor olun, ister metin tabanlı protokoller üzerinden ikili veri iletiyor ya da API’lerle çalışıyor olun, Base64’ü anlamak vazgeçilmezdir.

Base64 Nedir?

Base64, ikili veriyi ASCII karakter dizisi biçiminde temsil eden bir ikili-metin kodlama şemasıdır. Veriyi göstermek için 64 karakterlik bir küme (A-Z, a-z, 0-9, +, /) kullanır ve padding için = karakterinden yararlanır.

“Base64” adı, alfabesi olarak tam olarak 64 yazdırılabilir ASCII karakteri kullanmasından gelir. Şema, e-postanın ilk günlerinde, MIME (Multipurpose Internet Mail Extensions) standardının yalnızca 7 bitlik ASCII metni işleyebilen e-posta mesajlarına görsel ve belge gibi ikili dosyaları güvenilir biçimde ekleyebilmesi için bir yola ihtiyaç duyduğu sırada ortaya çıktı. Base64 resmî olarak RFC 4648’de tanımlandı ve kökleri 1980’lerin sonlarındaki PEM (Privacy Enhanced Mail) belirtimine uzanır. O günden bu yana, bilişimde en yaygın benimsenen kodlama yöntemlerinden biri haline gelmiştir.

Neden Base64 Kullanılır?

  1. Veri İletimi: Birçok protokol yalnızca metin verisini destekler. Base64, ikili içeriğin güvenli biçimde iletilmesine olanak tanır.
  2. Data URI’ler: Küçük görselleri veya dosyaları HTML/CSS içine doğrudan data URI’ler aracılığıyla gömün.
  3. API Yükleri: JSON yüklerinde ikili veriyi kodlama sorunları yaşamadan gönderin.
  4. E-posta Ekleri: MIME kodlaması, ekler için Base64 kullanır.

Bunları daha somut hale getirmek için, Base64’ün kullanıldığı günlük senaryolar şunlardır:

  • E-posta ekleri (MIME): Bir e-postaya PDF veya görsel eklediğinizde, e-posta istemciniz dosyayı Base64 ile kodlar ve mesaj gövdesine bir metin bloğu olarak gömer. Alıcının istemcisi bunu tekrar orijinal dosyaya çözer.
  • HTML/CSS içine görsel gömme: Harici bir görsele bağlantı vermek yerine, onu bir data URL olarak satır içine yerleştirebilirsiniz: <img src="data:image/png;base64,iVBOR...">. Bu, küçük simgeler ve sprite’lar için yararlı olan ekstra bir HTTP isteğini ortadan kaldırır.
  • JSON/XML içinde ikili veri saklama: JSON ve XML, ham baytları doğrudan temsil edemeyen metin biçimleridir. Base64, küçük resimler, kriptografik anahtarlar veya sertifikalar gibi ikili içeriği sıradan bir karakter dizisi alanı olarak dahil etmenize olanak tanır.
  • HTTP Basic Authentication: Authorization header’i kimlik bilgilerini Basic base64(username:password) biçiminde kodlar. Örneğin, user:pass, Basic dXNlcjpwYXNz olur. Bunun bir kodlama olduğunu, şifreleme olmadığını unutmayın — yanında her zaman HTTPS kullanın.

Base64 Nasıl Çalışır?

Base64 kodlama, ikili verinin her 3 baytını (24 bit) alıp 4 karaktere (her biri 6 bit) dönüştürerek çalışır:

Orijinal:   01001101 01100001 01101110  (3 bayt = "Man")
Bölme:      010011 010110 000101 101110  (4 grup, her biri 6 bit)
Base64:     T      W      F      u       (4 karakter)

Adım Adım Örnek: “Hi” Kodlama

Her aşamada tam olarak ne olduğunu görmek için kısa “Hi” karakter dizisini birlikte kodlayalım:

1. ASCII değerlerini alın:

  • H = 72, i = 105

2. 8 bitlik ikiliye dönüştürün:

  • H = 01001000, i = 01101001

3. Tüm bitleri birleştirin:

  • 01001000 01101001 (toplam 16 bit)

4. 6 bitlik gruplara bölün (son grubu doldurmak için sıfırlarla padding ekleyin):

  • 010010 000110 100100
  • Orijinal 16 bit, 3 adet 6’lık gruba (= 18 bit) ihtiyaç duyar; bu yüzden 2 sıfır biti eklenir.

5. Her 6 bitlik değeri Base64 alfabesine eşleyin:

  • 010010 = 18 → S
  • 000110 = 6 → G
  • 100100 = 36 → k

6. Padding ekleyin: Girdi 2 bayt olduğu (3’ün katı olmadığı) için bir = eklenir.

Sonuç: SGk=

Bu padding kuralı basittir: girdi uzunluğu mod 3 ile 1 ediyorsa == ekleyin; 2 ediyorsa = ekleyin; 0 ise padding gerekmez.

Yaygın Tuzaklar

Boyut Artışı

Base64, veri boyutunu yaklaşık %33 artırır. 1 MB’lık bir görsel, Base64 ile kodlandıktan sonra kabaca 1,37 MB olur (kesin ek yük, satır sonlarına ve padding’e bağlıdır). Simgeler gibi küçük varlıklar için bu ihmal edilebilir, ancak büyük dosyalarda şişme hızla birikir — 10 MB’lık bir video 13 MB’ı aşar. Satır içi gömmenin sağladığı kolaylığın boyut maliyetine değip değmediğini değerlendirin.

Şifreleme Değildir

Base64 bir kodlamadır, şifreleme değildir. Hiçbir güvenlik sağlamaz ve kolayca çözülebilir. Herkes bunu anında tersine çevirebilir — JavaScript’te atob('SGVsbG8=') çağrısı "Hello" döndürür. Parolaları, token’leri veya hassas veriyi gizlemek için Base64’ü asla kullanmayın. Gizlilik gerekiyorsa, bunun yerine uygun şifrelemeyi (AES, RSA vb.) tercih edin.

URL Güvenliği

Standart Base64, URL’lerde ve sorgu dizelerinde özel anlamı olan + ve / karakterlerini kullanır. Örneğin, standart Base64’teki data+test/value ifadesi bir URL parametresini bozar. URL güvenli Base64, + yerine - ve / yerine _ kullanır; böylece data-test_value gibi karakter dizileri yüzde kodlama gerektirmeden URL’lerde güvenle kullanılabilir. Çoğu dil URL güvenli bir varyant sunar — Base64 çıktınız bir URL’de görünecekse her zaman bu varyantı kullanın.

Farklı Programlama Dillerinde Base64

Çoğu dilin yerleşik Base64 desteği vardır. İşte iki yaygın örnek:

// JavaScript (tarayıcı ve Node.js)
btoa('Hello')     // "SGVsbG8="
atob('SGVsbG8=')  // "Hello"
# Python
import base64
base64.b64encode(b'Hello').decode()   # 'SGVsbG8='
base64.b64decode('SGVsbG8=').decode()  # 'Hello'
// Go
package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    encoded := base64.StdEncoding.EncodeToString([]byte("Hello"))
    fmt.Println(encoded) // "SGVsbG8="

    decoded, _ := base64.StdEncoding.DecodeString("SGVsbG8=")
    fmt.Println(string(decoded)) // "Hello"

    // URL güvenli varyant
    urlEncoded := base64.URLEncoding.EncodeToString([]byte("Hello?World"))
    fmt.Println(urlEncoded) // "SGVsbG8/V29ybGQ="
}

JavaScript’te btoa() (binary-to-ASCII) kodlar ve atob() (ASCII-to-binary) çözer. btoa()’nın yalnızca Latin-1 karakterlerini işlediğini, Unicode karakter dizileri için önce UTF-8’e kodlamanız gerektiğini unutmayın. Python’un base64 modülü bytes nesneleriyle çalıştığı için, içine geçirmeden önce karakter dizisini b'...' veya .encode() ile baytlara dönüştürürsünüz. Go’nun encoding/base64 paketi hem StdEncoding hem de URLEncoding sunar; bu da kullanım senaryonuza uygun varyantı seçmeyi kolaylaştırır. Java, C#, Ruby, PHP gibi diğer dillerin çoğu da standart kütüphanelerinde benzer tek satırlık API’ler sunar.

Base64 Aracımızı Kullanma

Base64 Kodlayıcı/Çözücümüz şunları kolaylaştırır:

  • Metin veya dosyaları Base64’e kodlama
  • Base64 karakter dizilerini çözme
  • Web’e gömmek için data URI’ler oluşturma
  • URL güvenli kodlama varyantlarını işleme

Sıkça Sorulan Sorular

Base64 ne için kullanılır?

Base64, ikili veriyi yalnızca metin tabanlı kanallar üzerinden iletmek için kullanılır. En yaygın kullanımlar; data URI’ler aracılığıyla HTML/CSS içine görsel gömme, e-posta eklerini (MIME) kodlama, JSON API’lerinde ikili yükler gönderme ve HTTP Basic Authentication header’lerinde kimlik bilgilerini kodlamadır. Bir protokol veya biçim yalnızca ASCII metnini desteklediğinde ancak ikili içerik dahil etmeniz gerektiğinde, Base64 standart çözümdür.

Base64 şifreleme ile aynı mıdır?

Hayır. Base64 bir kodlamadır, şifreleme değildir — sıfır güvenlik sağlar. Herkes atob() gibi yerleşik tarayıcı fonksiyonlarını veya komut satırı araçlarını kullanarak bir Base64 karakter dizisini anında çözebilir. Parolaları, API anahtarlarını veya hassas veriyi gizlemek için Base64’ü asla kullanmayın. Gizlilik gerekiyorsa, AES-256 veya RSA gibi uygun şifreleme algoritmalarını kullanın ve her zaman HTTPS üzerinden iletin.

Base64 dosya boyutunu neden %33 artırır?

Base64, girdideki her 3 baytı çıktıda 4 ASCII karakterine eşler. 4/3 = 1,333 olduğundan, kodlanmış çıktı her zaman orijinal ikili verinin yaklaşık %33’ü kadar daha büyüktür. Bu ek yük, küçük varlıklar (simgeler, küçük resimler) için kabul edilebilir ancak büyük dosyalarda birikir — 10 MB’lık bir görsel, kodlamadan sonra ~13,3 MB olur. Büyük dosyalar için doğrudan ikili aktarım genellikle daha verimlidir.

Standart Base64 ile URL güvenli Base64 arasındaki fark nedir?

Standart Base64, 62. ve 63. karakterleri olarak + ve / kullanır, ancak bunların URL’lerde özel anlamları vardır. URL güvenli Base64 (RFC 4648 Bölüm 5’te tanımlanmıştır) bunları - ve _ ile değiştirerek, URL’lerde ve dosya adlarında yüzde kodlama gerektirmeden doğrudan kullanılabilen karakter dizileri üretir. JWT token’leri, URL parametreleri ve kodlanmış karakter dizisinin bir URL’de göründüğü her bağlamda URL güvenli Base64’ü kullanın.

Base64, Çince veya emoji gibi Unicode metni işleyebilir mi?

Doğrudan değil. JavaScript’teki btoa() fonksiyonu yalnızca Latin-1 karakterlerini kabul eder. Unicode metni Base64 ile kodlamak için, önce TextEncoder kullanarak onu UTF-8 baytlarına dönüştürün, ardından bu baytları kodlayın. Python’da, base64.b64encode() çağrısına geçirmeden önce .encode('utf-8') çağırın. Bu iki adımlı süreç, çok baytlı karakterlerin kodlama/çözme gidiş dönüşü boyunca doğru biçimde korunmasını sağlar.

Sonuç

Base64, her geliştiricinin anlaması gereken çok yönlü bir kodlama şemasıdır. İkili veriyi yalnızca metin tabanlı kanallar üzerinden iletmeniz gerektiğinde kullanın, ancak bunun bir güvenlik önlemi olmadığını ve veri boyutunu artırdığını unutmayın.


Daha derinine inmeye hazır mısınız? Gerçek dünya uygulama desenleri, JavaScript ve Python’da kod örnekleri, performans optimizasyonu ipuçları ve güvenlik konuları için İleri Düzey Base64 Rehberi: MIME’den Data URL’lere yazımıza göz atın.