Base64 Çözücü

/

Verileriniz %100 gizlidir -- Base64 tamamen cihazınızda kodlanır ve çözülür.

Düz metin
Base64

Base64 nedir?#

Base64, ikili verileri 64 ASCII karakteriyle düz metin olarak temsil etmenin bir yoludur: A–Z, a–z, 0–9 ve ayrıca + ile /. Resimler, anahtarlar ve e-posta ekleri gibi ikili verilerin, metin için tasarlanmış sistemler üzerinden güvenle iletilmesini sağlar. Bu bir kodlamadır, şifreleme değil.

Base64, 64 karakterden oluşan sabit bir alfabe kullanır. 0'dan 63'e kadar her değer bu karakterlerden tam olarak birine karşılık gelir; bu sayede herhangi bir 3 bayt ikili veri 4 okunabilir karaktere dönüşür:

DeğerlerKarakterler
0–25A–Z26 büyük harf
26–51a–z26 küçük harf
52–610–910 rakam
62–63+ /2 sembol

"=" işareti tek istisnadır. Bu bir dolgu karakteridir, 64 değerden biri değildir; yalnızca son bloğu tamamlamak için kullanılır.

Bunu büyük ihtimalle daha önce görmüşsünüzdür. Base64, ikili verinin metin içinde yer alması gereken her yerde karşımıza çıkar:

  • Küçük bir resim veya simgeyi doğrudan HTML veya CSS içine gömmek
  • JSON API yanıtı içinde ikili veri döndürmek
  • E-posta eklerini kodlamak (MIME)
  • Anahtar ve sertifikaları PEM dosyalarında saklamak

Bu data-URI tekniği şöyle görünür. Uzun dize, görüntünün tamamıdır:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

Base64 neden var?#

Erken dönem ağ protokolleri ham baytlar için değil, metin için tasarlanmıştı. ASCII 7 bit ve 128 karakter kullanıyordu; bu İngilizce için yeterliydi ancak ikili veriler için değildi. Bazı sistemler kontrol karakterlerini bozuyor ya da satır sonlarını (LF'yi CR + LF'ye) yeniden yazıyordu; bu da iletim sırasında resimleri ve sesi sessizce bozuyordu.

Base64, her sistemin üzerinde anlaştığı karakterleri kullanarak bu sorunların tamamını aşar. Base16 ve Base32 da aynı işi daha küçük alfabelerle yapar, ancak Base64 güvenli kalırken karakter başına daha fazla veri sıkıştırır. İşte bu yüzden tercih edildi.

Base64 kodlaması nasıl çalışır#

Tüm şema, tekrarlanan tek bir fikirdir: 3 bayt (24 bit) alın, bunları dört 6-bitlik gruba yeniden bölün ve her grubu alfabede arayın. İşte "Logto" kelimesinin elle kodlanması.

  1. Her karakteri ASCII kodunu kullanarak 8-bitlik ikili olarak yazın.
  2. Bir seferde 3 bayt alın. Bu 24 bittir.
  3. Aynı 24 biti dört adet 6-bitlik gruba yeniden bölün.
  4. Her 6-bitlik grubu 0'dan 63'e kadar bir sayı olarak okuyun.
  5. O sayıyı bir karakter elde etmek için alfabede arayın.
  6. Son bayt grubunun 3'e ulaşmaması durumunda, kalan bitleri sıfırlarla doldurun ve her bloğun 4 karakter kalmasını sağlamak için "=" ekleyin.

Adım 1. Her karakteri 8-bitlik ikili karşılığına çevirin:

KarakterASCII koduİkili
L7601001100
o11101101111
g10301100111
t11601110100
o11101101111

Adım 2. İlk üç baytı, "Log"u alın ve aynı 24 biti dört 6-bitlik gruba yeniden bölün:

8-bitlik baytlar
01001100 01101111 01100111
6-bitlik gruplar
010011 000110 111101 100111

Adım 3. Her 6-bitlik grubu bir sayı olarak okuyun, ardından o sayıyı alfabede arayın:

6-bitlik grupDeğerBase64 karakteri
01001119T
0001106G
111101619
10011139n

"Logto" 5 bayttır, 3'ün katı değildir. Son iki bayt "to", 6 + 6 + 4 biçiminde bölünür. Son 4 biti 6-bitlik grubu doldurmak için sıfırlarla tamamlayın, ardından 4 karakterlik bloğu tamamlamak için bir "=" ekleyin:

Blokları bir araya getirin:

"Logto"  →  TG9ndG8=

Her dil bunu yerleşik olarak sunar. Node.js'te:

const text = 'Logto';
const base64 = Buffer.from(text).toString('base64');
console.log(base64); // TG9ndG8=

Bu süreçten üç kural çıkar; bunları akılda tutmakta fayda var:

  • 3 girer, 4 çıkar: Çıktı uzunluğu, girdinin 4'ün katına yuvarlanan halidir; dolayısıyla kodlanmış veriler her zaman yaklaşık %33 daha büyük olur.
  • "=" dolgu anlamına gelir: Yalnızca girdi 3 baytın katı olmadığında görünür.
  • Dolgu artanları sayar: "=" yoksa 3 baytın katı demektir; bir "=" 2 artık bayt olduğunu; iki "=" ise 1 artık bayt olduğunu gösterir.

Base64'ü ne zaman kullanmalısınız?#

İkili verinin yalnızca metin alabilen bir kanaldan geçmesi gerektiğinde Base64'e başvurun:

  • Satır içi varlıklar: Bir istek tasarrufu sağlamak için HTML/CSS'e küçük bir resim veya yazı tipi gömin.
  • Yalnızca metin taşımaları: JSON, XML veya URL sorgu parametresine ikili veri yerleştirin.
  • Kısıtlı karakterler: Kontrol baytlarında sorun yaşayan sistemler üzerinden veri taşıyın.

Karşılığında elde ettikleriniz:

  • Her yerde çalışır: ASCII destekli her sistem, karakter seti müzakeresi olmaksızın okuyabilir.
  • Hiçbir şey bozulmaz: Çıktı, ham baytları aksi hâlde bozacak kanallardan sağ salim geçer.

URL-güvenli Base64 (Base64URL)#

Standart Base64, URL'ler, sorgu dizeleri ve dosya adlarının çalışma biçimiyle çakışan üç karaktere dayanır: +, / ve = dolgusu. Normal bir Base64 dizesini bir bağlantıya yapıştırdığınızda sessiz hatalar oluşabilir:

  • + boşluğa dönüşür. Sorgu dizesinde pek çok sunucu +'yı boşluk olarak okur. Bu nedenle ?data=ab+cd sessizce "ab cd" olarak gelir ve baytlar yanlış olur.
  • / yol ayırıcısıdır. Bir değerin içindeki / yeni bir yol segmenti olarak okunabilir ve çoğu dosya sistemi bunu dosya adında doğrudan reddeder.
  • = de ayrılmış karakterdir. Sorgu dizesinde anahtarları değerlerden ayırır; bu yüzden sondaki = dolgusu kesilebilir ya da yanlış okunabilir.

Bunları yüzde kodlamayla işaretleyebilirsiniz (+ → %2B, / → %2F, = → %3D), ancak bu dizeyi şişirir ve yanlışlıkla çift kodlama yapmak kolaydır.

Base64URL (RFC 4648 §5) bu sorunu kaynakta çözer: +'yı -'yle, /'yi _'yla değiştirin ve = dolgusu bırakın. Sonuç, hiçbir şey kaçırmadan doğrudan bir URL'ye, sorgu parametresine veya dosya adına girer. URL'lerde, dosya adlarında ve pek çok web API'sinde kullanıldığını göreceksiniz.

const base64 = 'TG9ndG8=';
const urlSafe = base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
console.log(urlSafe); // TG9ndG8

Sınırlamalar (ve bir büyük yanılgı)#

Base64 bir temsil yöntemidir, bedavadan büyük veri kapasitesi değil. Üç şeyi aklınızda tutun:

  • ~%33 daha büyük: 3 bayt 4 karaktere dönüşür; bu nedenle kodlanmış veriler yaklaşık üçte bir oranında şişer.
  • CPU maliyeti vardır: Yüksek hacimde veya büyük yüklerde kodlama ve kod çözme işlemleri bedava değildir.
  • Okunaklı değildir: Opak dizeler, günlükleri ve hata ayıklamayı zorlaştırır.
Base64 şifreleme değildir. İnsanların en çok yaptığı hata budur. Base64 hiçbir şeyi gizlemez. Herkes tek satırda şifresini çözebilir. Veriler hassassa şifreleyin. Base64 yalnızca şekli değiştirir, kimin okuyabileceğini değil.

Sık sorulan sorular#

Base64 şifreleme midir ya da güvenli midir?

Hayır. Herkese açık bir alfabeyle tersine çevrilebilir kodlamadır; bu yüzden herkes anında çözebilir ve sıfır gizlilik sağlar. Hassas verileri şifreleyin.

Base64 dizem neden yaklaşık %33 daha büyük?

Base64 her 3 baytı 4 karaktere dönüştürür; dolayısıyla kodlanmış biçim her zaman orijinal baytlardan yaklaşık üçte bir daha büyük olur.

Sondaki "=" işaretleri ne anlama gelir?

Bunlar çıktıyı 4'ün katı tutmak için kullanılan dolgu karakterleridir. Bir "=", girdinin 2 artık baytı olduğunu; iki "=" ise 1 artık baytı olduğunu gösterir; "=" yoksa uzunluk zaten 3'ün katıdır.

Base64 ile Base64URL arasındaki fark nedir?

Base64URL, URL ve dosya adı güvenli bir alfabeyle aynı kodlamadır: - ve _ sırasıyla + ve /'nin yerine geçer; = dolgusu genellikle bırakılır. URL'lerde, dosya adlarında ve pek çok web API'sinde yaygın olarak kullanılır.

Base64 herhangi bir dosyayı kodlayabilir mi, yoksa yalnızca metni mi?

Her türlü ikili veri: resimler, PDF'ler, anahtarlar, çalıştırılabilir dosyalar. Base64 ham baytlar üzerinde çalışır; dolayısıyla orijinal içerik türü önemli değildir.

Bu araç verilerimi bir yere gönderiyor mu?

Hayır. Kodlama ve kod çözme tamamen tarayıcınızda çalışır. Yapıştırdığınız hiçbir şey yüklenmez veya kaydedilmez.

Daha Fazlasını Logto Cloud ile Keşfedin