Base64 Kodlaması Nasıl Çalışır?

Base64 kodlaması, ikili verileri 6 bitlik karakter gösterimine dönüştürerek ikili verileri bir ASCII dize biçimine dönüştürme işlemidir. Base64 kodlama yöntemi, görüntüler veya video gibi ikili veriler, verileri düz metin (ASCII) biçiminde iletmek üzere tasarlanmış sistemler üzerinden iletildiğinde kullanılır.

Base64 Kodlaması Neden Kullanılıyor?

Base64 kodlaması ihtiyacı, medya iletildiğinde ortaya çıkan sorunlardan kaynaklanmaktadır. ham ikili biçim metin tabanlı sistemlere

Metin tabanlı sistemler (gibi e-posta) ikili verileri özel komut karakterleri de dahil olmak üzere çok çeşitli karakterler olarak yorumlamak, ikili verilerin çoğu aktarım ortamına iletilen veriler bu sistemler tarafından yanlış yorumlanır ve aktarımda kaybolur veya bozulur. işlem.

Ekranda bilgisayar koduna bakan adam
Wutthichai Luemuang / EyeEm / Getty Images

Bu tür ikili verileri bu tür aktarım sorunlarını önleyecek şekilde kodlamanın bir yöntemi, bunları Base64 kodlu biçimde düz ASCII metni olarak göndermektir. Bu, düz metin dışındaki verileri göndermek için MIME standardı tarafından kullanılan tekniklerden biridir.

PHP ve Javascript gibi birçok programlama dili, Base64 kodlaması kullanılarak iletilen verileri yorumlamak için Base64 kodlama ve kod çözme işlevleri içerir.

Base64 Kodlama Mantığı

Base64 kodlaması, ikili verileri 3 tam baytlık 6 bitlik bölümlere ayırır ve bunları ASCII standardında yazdırılabilir karakterler olarak temsil eder. Bunu temelde iki adımda yapar.

İlk adım, ikili diziyi 6 bitlik bloklara bölmektir. Base64, kodlanmış verilerin yazdırılabilir ve insan tarafından okunabilir olmasını sağlamak için yalnızca 6 bit (2^6 = 64 karaktere karşılık gelir) kullanır. ASCII'de bulunan özel karakterlerin hiçbiri kullanılmaz.

64 karakter (dolayısıyla Base64 adı), 10 rakam, 26 küçük harf, 26 büyük harf karakterin yanı sıra Artı işareti (+) ve Eğik Çizgidir (/). olarak bilinen 65. bir karakter de vardır. ped, Eşittir işaretidir (=). Bu karakter, ikili verinin son bölümü tam 6 bit içermediğinde kullanılır.

Base64 Kodlama Örneği

Örneğin, üç ASCII numarası 155, 162 ve 233 alın. Bu üç sayı, 100110111010001011101001 ikili akışını oluşturur. Bir görüntü gibi bir ikili dosya, onlarca veya yüz binlerce sıfır ve bir için çalışan bir ikili akış içerir.

Bir Base64 kodlayıcı, ikili akışı altı karakterlik gruplara bölerek başlar: 100110 111010 001011 101001. Bu gruplamaların her biri 38, 58, 11 ve 41 sayılarına dönüşür.

Altı karakterli bir ikili akış, ikili dizide 1 ile temsil edilen her değeri konum karesiyle karesini alarak ikili (veya taban-2) ondalık (taban-10) karakterlere dönüştürür. Sağdan başlayıp sola hareket eden ve sıfır ile başlayan ikili akıştaki değerler 2^0, sonra 2^1, sonra 2^2, sonra 2^3, sonra 2^4, sonra 2^5'i temsil eder.

İşte buna bakmanın başka bir yolu. Soldan başlayarak her pozisyon 1, 2, 4, 8, 16 ve 32 değerindedir. İkili sayı yuvada 1'e sahipse, bu değeri eklersiniz; yuvada 0 varsa, yok. 100110 ikili dizgisi 38 ondalık sayıya dönüşür: 0*2^01 + 1*2^1 + 1*2^2 + 0*2^3 + 0*2^4 + 1*2^5 = 0+2 +4+0+0+32.

Base64 kodlaması bu ikili dizgiyi alır ve onu 38, 58, 11 ve 41'lik 6 bitlik değerlere ayırır.

Son olarak, bu sayılar Base64 kodlama tablosu kullanılarak ASCII karakterlerine dönüştürülür. Bu örneğin 6 bitlik değerleri ASCII dizisine çevrilir m6Lp.

Base64 dönüştürme tablosunu kullanma:

  • 38 m'dir
  • 58, 6
  • 11 L'dir
  • 41 p'dir

Bu iki adımlı işlem, kodlanmış ikili dizenin tamamına uygulanır.

Kodlanmış verilerin düzgün şekilde yazdırılabilmesini ve herhangi bir posta sunucusunun satır uzunluğu sınırını aşmamasını sağlamak için, satır uzunluklarını 76 karakterin altında tutmak için yeni satır karakterleri eklenir. Yeni satır karakterleri, diğer tüm veriler gibi kodlanır.

3 baytlık ikili segmentleri korumak için dolgu eklemekten, Base64 kodlamasının tüm amacı, Base64 tablosunu kullanarak ikiliyi metne dönüştürmek, iletilen ikilinin bütünlüğünü korumaktır. bilgi.

Base64 Kodlama Tablosu

Aşağıdaki tablo, Base64 kodlamasında kullanılan 64 karakterin tümünü çevirir.

Base64 Kodlama Tablosu
Değer karakter Değer karakter Değer karakter Değer karakter
0 A 16 Q 32 G 48 w
1 B 17 r 33 H 49 x
2 C 18 S 34 ben 50 y
3 NS 19 T 35 J 51 z
4 E 20 sen 36 k 52 0
5 F 21 V 37 ben 53 1
6 G 22 W 38 m 54 2
7 H 23 x 39 n 55 3
8 ben 24 Y 40 Ö 56 4
9 J 25 Z 41 P 57 5
10 K 26 a 42 Q 58 6
11 L 27 B 43 r 59 7
12 m 28 C 44 s 60 8
13 n 29 NS 45 T 61 9
14 Ö 30 e 46 sen 62 +
15 P 31 F 47 v 63 /

Endgame'i Çözmek

Kodlama işleminin sonunda bir sorun olabilir. Orijinal verilerin bayt cinsinden boyutu üçün katıysa, her şey yolunda gider. Değilse, boş baytlar olabilir. Doğru kodlama için tam olarak 3 baytlık ikili veri gereklidir.

Çözüm, 3 baytlık bir grup oluşturmak için 0 değerinde yeterli bayt eklemektir. Verinin fazladan bir bayt veriye ihtiyacı varsa, bu tür iki değer eklenir, iki ekstra bayt için bir değer eklenir.

Elbette, bu yapay sondaki '0'lar, aşağıdaki kodlama tablosu kullanılarak kodlanamaz. 65. karakterle temsil edilmelidirler. Base64 dolgu karakteri Eşittir işaretidir (=) ve kodlanmış verilerin sonuna yerleştirilir.