Bu yazımda sıklıkla karşımıza çıkan bir kodlama yöntemi olan Base64’ten bahsedeceğim.
Base64 Nedir ?
Veri iletimi sırasında veri kaybını önlemek amacıyla geliştirilmiş bir kodlama tekniğidir. Bir çoğumuz bunu Base64 şifreleme yöntemi olarak biliriz ama Base64 bir şifreleme yöntemi değil, bir kodlama yöntemidir.Peki nasıl çalışır bu kodlama yönetmi ?
Kodlanmak istenen veri öncelikle karakter karakter ayrılır. Daha sonra her bir karakterin 8 bit uzunluğundaki binary karşılığı bulunur.Bulunan 8 bitlik ifadeler yan yana yazılır ve tekrar 6-bitlik gruplara bölünür . Her bir 6-bitlik grubun Base64 alfabesindeki karşılığı yazılır ve kodlama işlemi tamamlanır.Kod çözme işlemi(Decode) içinde aynı işlemlerin tersi uygulanır.
Örnek
Kodlanacak Metin : istanbul
Aşama-1: Binary Karşılığını Bul
Öncelikle “istanbul” kelimesinin herbir karakterinin ASCII karşılığını bulacağız , daha sonrada bulduğumuz herbir decimal değerin 8-bitlik binary karşılığını hesaplayacağız , dolayısıyla istanbul kelimesinin binary karşılığını bulmuş olacağız.
Aşama-2: 6-bitlik kısımlara ayır
Şimdide bulduğumuz binary değerini 6-bitlik kısımlara ayıracağız.Bu aşama algoritmanın en önemli aşaması diyebilirim.Çünkü 6-bit kısımlara ayırma işlemi yaparken eğer değerimizin uzunluğu 6 nın katı değil ise 6’nın katı olana dek sonuna 8 bit uzunluğunda ‘00000000’ değerini ekleyeceğiz. “istanbul” kelimsenin herbir harfinin binary karşılığını yan yana yazdığımız zaman uzunluğu 64 bit oluyor.Fakat 64 altının katı olmadığı için sonuna 8 bit uzunluğunda 0 ekliyoruz ve 72 bit oluyor yani 6 nın katına ulaşmış olduk.Bakın burası çok önemli ,66 da altının katı ama yapmadık , 72 yaptık çünkü 6 nın katına ulaşma işlemini 8 bit 0 ekleyerek yapmamız gerekiyor. Örneğin uzunluğumuz 80 bit olsaydı iki kez 8 bit ekleyecektik ve 96 ya tamamlayacaktık. Kısacası uzunluğumuzu 24 ün katına tamamlamaya çalışıyoruz.
Aşama-3: Base64 alfabesindeki değerlerini bul
Bu aşamada 2. aşamada bulduğumuz 6-bitlik grupların Base64 alfabesindeki karşılığını bulacağız.Önce 6-bitlik grupların decimal karşılığını hesaplaycağız , daha sonra Base64 alfabesindeki hesapladığımız decimal değere karşılık gelen karakteri bulacağız.Ama burada dikkat etmemiz gereken bir kısım var .Eğer sondaki 6-bitlik gruplar bizim eklediğimiz 0 lardan oluşuyor ise onların yerine ‘ = ‘ yazıyoruz.Bu önemli bir nokta çünkü biz eğer base64 ile kodlanmış metini tekrar eski haline döndürmek istediğimiz zaman ‘ = ‘ işaretlerinin sayısına bakarak bu metini kodlamak için kaç tane 8-bit lik sıfır eklendiğini biliriz.
Metin : istanbul
Base64 ile kodlanmış hali : aXN0YW5idWw=
Metini geri döndürmek(Decode) içinde aşağıdan yukarıya doğru aşamalar tekrar uygulanır:
- Herbir karakterin Base64 alfabesinde karşılık gelen sayıyı bul
- Bulunan herbir sayının binary karşılığını bul
- Binary değerleri yana yana yaz ve 8-bit gruplara ayır
- Eğer sonradan eklediğimiz bitler varsa çıkar ( 8-bitlik 0 lar varsa)
- Herbir 8-bitlik grupların decimal değerlerini bul
- Decimal değerlere göre ASCII tablosunda karşılık gelen değeri yaz
Github : https://github.com/aozturkk/Kriptoloji/tree/master/Base64
öncelikle açıklamalar için teşekkür ediyorum, size birkaç sorum var. base64 algoritmasının avantajlarından ve dezavantajlarından bahseder misininiz? aynı amaç için kullanılan rakip algoritmalar nelerdir?
Avantajı gönderdiğimiz mesaj bozulmasının önüne geçiyoruz.Dezavantajı ise bit bloklarının sayısını 8 den 6 ya çevirdiğimiz için bit blok sayısı artıyor dolayısıyla mesajın uzunluğu da artıyor. Alternatif olarak base32 , base58 gibi algoritmalar var lakin en çok kullanılan base64 tür.