Base58 Kodlama Yöntemi

Ali Orhun Akkirman
3 min readJan 16, 2023

Base58 kodlama yöntemi, genel olarak bitcoin adresleriyle kullanımı yaygınlaşan, base64'teki bazı problemlere karşı ortaya atılmış bir kodlama yöntemidir.

Kodlama (encode) yöntemi nedir?

Özellikle Türkçe’deki kelime sınırından kaynaklanan bir problem nedeniyle tam olarak anlaşılmayan bir ifade olan “kodlama” yani “encode” işleminden bahsetmek istiyorum. “code” yani yine “kodlama” ifadesinden biraz farklıdır. “code” kelimesinden farklı olarak genellikle “şifrelemek” (encrypt, cipher vs.) kavramına daha yakın olarak konumlanmaktadır.

Bir verinin alıcıya iletilmesi sırasında farklı şifreleme teknikleri kullanılarak, farklı formata dönüştürülmesi işlemine bu ad verilmektedir.

Bu kavramdan farklı olarak tek yönlü “özetleme” dönüşümü yapılabilen “hash” kavramı da sıklıkla karıştırılabilmektedir fakat üstteki kavramlara göre daha uzak bir kavramdır. Nedeni de belirttiğimiz gibi tek yönlü olmamasıdır.

Encode için kodlama dedikten sonra ters yönde bir işlem yapılmasına da “decode” yani “kod çözmek” ismi verilmektedir. Tek yönlü olmamasının en önemli faydası olarak görülebilir.

Kodlamanın şahı: Base64 Kodlama Yöntemi

Kullanım alanı genişliğinden dolayı belki de kodlamanın şahı olarak adlandırılabilecek bir kodlama yöntemi bulunuyor. Bu kodlama yöntemi base64 olarak ifade edildiği şekilde özellikle ikili (binary) verilerin ASCII karakterleri kullanılarak taşınabilmesine olanak sağlayan bir kodlama yöntemidir.

Bu yöntemde özet olarak kodlamak istenilen veri karakterlerine ayrılır ve karakterlerin önce ASCII karşılığı “decimal” yani “ondalık” (bildiğimiz sayılar) değeri, sonrasında 8-bitlik ikili (binary) karşılığı bulunur. Bu adımdan sonra ifadeler, 6-bitlik gruplara bölünür ve her 6-bitlik grubun Base64 değerindeki karşılığı yani 0 ile 63 arasındaki bir değer bulunur. Bu şekilde “base64 kodlama” yapılmış olur. Ayrıca bu sonuçtan çıkan değer 4'ün katı olması gerektiği için eğer 4'ün katı değilse geri kalan değerler için kodlamanın sonuna “===” ifadeleri eklenmektedir.

base64 değer tablosu

Çok basit bir örnek yapmak gerekirse;

  1. “ali” kelimesini base64 kodlamak için önce ASCII decimal değeri belirlenir ve “97 108 105” sonucu alınır.
  2. Daha sonrasında bu ifadelerin 8-bit ikili karşılığı bulunur ve “01100001 01101100 01101001” sonucu alınır.
  3. Daha sonrasında 6-bit’lik ikili (binary) gruplara bölünür ve “011000 010110 110001 101001” sonucu alınır. Eğer 6'nın katı olmasaydı geri kalan değerlerde 6'nın katı olacak şekilde 8-bit uzunluğunda 00000000 olarak ekleme yapıp uygulamak gerekiyor.
  4. Her grup için Base64 tablosundaki değerler karşılaştırılır ve “YWxp“ sonucu alınır.

Buradaki sonucu Linux komut satırından base64 komut satırı uygulaması ile sağlamasını yapabilirsiniz. Bu uygulama bir çok dağıtım ile standart gelmektedir.

Aşağıdaki komut ile düzyazı’yı base64 kodlamasına çevirebilirsiniz.

echo -n "ali" | base64

Benzer şekilde eğer kodu (sonuç olan YWxp) çözmek istiyorsanız da aşağıdaki komutu uygulamanız gerekmektedir.

echo -n "YWxp" | base64 -d

Peki ya Base58 nedir?

Base64'teki 64'lük tablodaki bazı karakterlerin gereksiz ve hatta bazı durumlarda sorun çıkartması ile ortaya çıkan bir kodlama yöntemi olarak düşünülebilir.

Base64 tablosundaki alfanümerik olmayan “+” ve “/” karakterleri çıkartılmıştır. Bunlardan farklı olarak da “0” (sıfır), “I” (büyük ı), “O” (büyük o) ve “l” (küçük L) gibi okurken karışıklık çıkartacak 6 karakterin çıkartılmış halidir. Özellikle bitcoin adreslerinde kullanılmaktadır.

base58 değer tablosu

Çok basit bir örnek yapmak gerekirse;

  1. “ali” kelimesini base64 kodlamak için önce ASCII decimal değeri belirlenir ve “97 108 105” sonucu alınır.
  2. Sonrasında sırası ile 97 * 2^(2*8), 108 * 2^(1*8), 105* 2^(0*8) değerleri hesaplanır ve toplanır. Sonrasında 6356992+27648+105 yani 6384745 değeri bulunur. Dolayısıyla decimal karşılık olarak bu sayı belirlenir.
  3. Sonrasında 58'e bölünmeye başlar ve kalanlar bir kenara yazılır. Bölüm: 110081, kalan: 47. — — Bölüm 1897, kalan 55 — — Bölüm 32, kalan 41 — Bölüm 0, kalan 32
  4. Kalan sayılar sırası ile tersten yazılır. Yani 32, 41, 55 ve 47.
  5. Bu sayılar tabloda belirlenir ve kodlanmış olarak “Zixp” bulunur.

--

--

Ali Orhun Akkirman

Sistem Yönetim Yazılım Geliştirme Takım Lideri @HAVELSAN