Base64 Encoder & Decoder

Girdi:
Çıktı:

📚 Algoritma Nasıl Çalışıyor?

Base64 Encoding Nedir?

Base64, binary verileri ASCII karakterlere dönüştüren bir encoding yöntemidir. 64 karakter kullanır: A-Z, a-z, 0-9, +, / ve padding için = işareti.

1. Encoding (Metni Base64'e Çevirme)

Adım 1: Metni UTF-8 byte dizisine çevir

const encoder = new TextEncoder();
const utf8Bytes = encoder.encode("Merhaba");
// Sonuç: [77, 101, 114, 104, 97, 98, 97]

Adım 2: Byte dizisini binary string'e çevir

let binaryString = '';
for (let i = 0; i < utf8Bytes.length; i++) {
  binaryString += String.fromCharCode(utf8Bytes[i]);
}
// "Merhaba" → binary string

Adım 3: Binary string'i Base64'e çevir

const encodedText = btoa(binaryString);
// "Merhaba" → "TWVyaGFiYQ=="

Nasıl Çalışır? Her 3 byte (24 bit) alınır, 4'er 6 bitlik gruplara bölünür. Her 6 bitlik grup Base64 karakterine çevrilir.

2. Decoding (Base64'ten Metne Çevirme)

Adım 1: Base64 formatını kontrol et

// Sadece geçerli Base64 karakterleri: A-Z, a-z, 0-9, +, /, =
if (!/^[A-Za-z0-9+/]*={0,2}$/.test(text)) {
  return 'Geçersiz format';
}

Adım 2: Padding kontrolü (Base64 string uzunluğu 4'ün katı olmalı)

const padding = base64Text.length % 4;
if (padding !== 0) {
  base64Text += '='.repeat(4 - padding);
}
// "TWVyaGFiYQ" → "TWVyaGFiYQ=="

Adım 3: Base64'ü binary string'e çevir

const binaryString = atob("TWVyaGFiYQ==");
// Binary string'e çevrildi

Adım 4: Binary string'i UTF-8 byte dizisine çevir

const bytes = new Uint8Array(binaryString.length);
for (let i = 0; i < binaryString.length; i++) {
  bytes[i] = binaryString.charCodeAt(i);
}

Adım 5: UTF-8 byte dizisini metne çevir

const decoder = new TextDecoder('utf-8');
const decodedText = decoder.decode(bytes);
// "Merhaba"

Önemli Noktalar

  • UTF-8 Desteği: Türkçe karakterler (ı, ş, ğ, ü, ö, ç) için TextEncoder/TextDecoder kullanılır
  • Padding: Base64 string uzunluğu 4'ün katı değilse '=' ile doldurulur
  • Fallback: Eski tarayıcılar için encodeURIComponent kullanılır
  • Güvenlik: Base64 şifreleme değildir, sadece encoding'dir!