Base64 Encoding nedir ve nerelerde kullanılır?
Bu flood’da Base64 Encoding
tekniğinin ne olduğunu ve nerelerde kullanıldığını anlatacağım.
Base64 Encoding
binary verileri metne dönüştürerek saklamaya veya iletmeye yarayan tekniklerden en yaygın olarak kullanılanıdır. Bu teknik ile temel olarak 8 bitlik baytlardan oluşan binary veri 6 bitlik (2^6 = 64
) parçalara bölünür.
6 bit ile ifade edilen 64 farklı sayı, ASCII
karakter kümesinde Printable Character
olarak ifade edilen ve aşağıda gösterilen 64 farklı karakterle eşleştirilmiştir. Eldeki 6 bitlik verinin bu tablo ile eşleştirilmesi ile Base64 Encoding
yapılmış olur.
Aşağıdaki örnekte 6 ile tam bölünebilen 24 bitlik (3 baytlık) ASD
metni Base64 Encoding
ile kodlanmıştır.
Base64
kodlama yapılacak verideki bayt sayısının 3'ün tam katı olmadığı durumda, verideki bayt sayısı 3'ün tam katı olana kadar veriye Padding
yapılır ve asıl veride olmayan parçalar çıktıda =
ile gösterilir. Aşağıdaki örnekte AS
metni padding ile kodlanmıştır.
Padding işleminden dolayı Base64
ile kodlanan verilerin çoğunlukla =
veya ==
sonlandığı görülür. Burada akla padding'e neden gerek olduğu sorusu gelebilir. Veri boyutunun Base64
'ü decode eden tarafça da bilindiği durumlarda padding'e aslında gerek olmadığı savunulabilir. Bu gözlem aslında doğrudur fakat tekniğin genelgeçer olarak her durumda çalışması için Padding kullanılmaktadır. Örneğin, Base64
'ün bir video akış (stream) uygulamasında kullanılması (veri boyutunun anlık olarak bilinemeyeceği) durumunda Padding'e ihtiyaç olacaktır.
Base64 Encoding
'ün ağırlıklı kullanım alanı, metin iletmek üzere kurgulanmış ve binary uyumu olmayan mail, HTTP, FTP gibi protokoller ile binary veri iletmektir. Bu protokoller ile binary veri iletilememesinin sebebi bu protokoller tarafından özel olarak değerlendirilen (CRLF
) gibi özel karakterlerin binary veri içinde geçme riskidir. Örnek olarak CRLF - Carriage Return / Line Feed
HTTP
istemci veya sunucusu tarafından Line Ending
olarak algılanacaktır. Base64 Encoding
ile veride özel karakter olmayacağı garanti edilmiş olur.
Base64
kodlama ile kodlaması yapılan her 3 bayt için 1 bayt harcandığı ve veri boyutunun yaklaşık olarak 3'te 1 oranında arttığı görülmektedir. Bu oran veri transfer performansını olumsuz etkileyecektir fakat bu konuda yapılabilecek pek bir şey maalesef yoktur.
Base64 Encoding
'in bir kullanım alanı da modern tarayıcılarda imaj ve diğer dosyaların Data URLs
formatı kullanılarak HTML
ve CSS
dokümanlarına Base64
ile kodlanarak eklenebilmesidir. Örn: <img src="data:image/jpeg:base64,a2ossA== />
Linux benzeri sistemlerde base64
programı kullanılarak verilen girdiler Base64 Encode
ve Base64 Decode
işlemine tabi tutulabilir. Aşağıdaki base64
programı ile birkaç örnek verilmiştir.
Base64
'ün en yaygın kullanım alanlarından biri de çeşitli nedenlerle binary yerine metin formatında saklanmak istenen verilerin kodlanmasıdır. MD5
ya da SHA1
sonucunda çıkan binary Hash
değeri efektif bir şekilde Base64
ile kodlanabilir.
Son olarak, MD5
ya da SHA1
sonucunda çıkan binary değer, her bir bayt 4'er bitlik iki parçaya bölünüp bu bölümlerin hex karşılıkları ile de verimsiz olarak metne çevrilebilir. Burada her bayt iki bayta dönüştürüldüğü için kayıp Base64
'e göre fazla olacaktır.