Adler32 Algoritması Nedir?

Adler-32, veri bütünlüğünü sağlamak için kullanılan bir karma (hash) fonksiyonudur. İki 16-bit sayı kullanarak hesaplanır ve 32-bit bir çıktı verir.

Adler-32, özellikle düşük kaynaklı cihazlar için uygundur ve veri bütünlüğü kontrolü yapmak için kullanılır.

Adler32 Nerelerde Kullanılır?

Örneğin, bir dosyanın indirilmesi sırasında, dosyanın doğru bir şekilde indirildiğini doğrulamak için kullanılabilir. Ayrıca, bazı veri iletim protokolleri, özellikle Zlib ve PNG gibi veri sıkıştırma algoritmalarında da kullanılır.

Adler-32'nin avantajları arasında hızlı hesaplama süresi ve düşük bellek gereksinimi yer alır. Ayrıca, hataların tespiti konusunda oldukça etkilidir.

Ancak, Adler-32'nin dezavantajları arasında, güvenlik açıkları bulunması ve çarpışma olasılığının SHA-2 ve SHA-3 gibi diğer hash fonksiyonlarından daha yüksek olması yer almaktadır. Bu nedenle, güvenlik açısından daha hassas uygulamalar için daha güçlü hash fonksiyonları önerilir.

Özetle, Adler-32, veri bütünlüğünü sağlamak için kullanılan bir karma (hash) fonksiyonudur. Özellikle düşük kaynaklı cihazlar için uygundur ve dosya indirme gibi veri transferi işlemlerinde kullanılır. Hızlı hesaplama süresi ve düşük bellek gereksinimi avantajları arasında yer alırken, güvenlik açıkları ve düşük çarpışma direnci dezavantajları arasındadır.

Adler-32 algoritması için örnekler şu şekildedir:

Örnek 1:

Elimizdeki veri: "Hello, world!"

Adler-32 değeri hesaplama:

İlk adım olarak, her karakterin ASCII değerini alın ve iki parçaya bölün (yani, ilk 8 bit ve sonraki 8 bit).

H e l l o , w o r l d !

72 101 108 108 111 44 32 111 114 108 100 33

01001000 01100101 01101100 01101100 01101111 00101100 00100000 01110111 01101111 01110010 01101100 01100100 00100001

Ardından, bu iki parçayı toplayın ve mod 65521'e göre alın.

01001000 01100101 => 0x4865 = 18597

01101100 01101100 => 0x6C6C = 27756

01101111 00101100 => 0x6F2C = 28460

00100000 01110111 => 0x2077 = 8281

01101111 01110010 => 0x6F72 = 28530

01101100 01100100 => 0x6C64 = 27748

00100001 => 0x21 = 33

Toplam: 18597 + 27756 + 28460 + 8281 + 28530 + 27748 + 33 = 141905

Mod 65521: 141905 % 65521 = 222

Son olarak, Adler-32 değerini 65536 ile çarpın ve 222 ekleyin.

Adler-32: 65536 * 0 + 222 = 222

Örnek 2:

Elimizdeki veri: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."

Adler-32 değeri hesaplama:

İlk adım olarak, her karakterin ASCII değerini alın ve iki parçaya bölün (yani, ilk 8 bit ve sonraki 8 bit).

L o r e m i p s u m d o l o r s i t a m e t , c o n s e c t e t u r a d i p i s c i n g e l i t .

76 111 114 101 109 32 105 112 115 117 109 32 100 111 108 111 114 32 115 105 116 32 97 109 101 116 44 32 99 111 110 115 101 99 116 101 116 117 114 32 97 100 105 112 105 115 99 105 110 103 32 101 108 105 116 46

010011

Adler-32 phyton kodu 1:

def adler32(message):

    a, b = 1, 0

    for char in message:

        a = (a + ord(char)) % 65521

        b = (b + a) % 65521

return (b << 16) | a

Bu kod, bir message metninin Adler-32 özetini hesaplar. Adler-32, bir metnin hepsini veya bölümlerini işleyerek bir özet değeri üretir.

Bu kodda, adler32() adlı bir fonksiyon tanımlanır. Fonksiyon, öncelikle a ve b adlı iki değişkeni 1 ve 0 değerleriyle başlatır. Daha sonra, message dizesindeki her karakter için bir döngü oluştururuz.

Her karakterin ASCII değeri, ord() fonksiyonu kullanılarak alınır ve a ile toplanır. Bu toplama işlemi sonucu 65521'den büyük olursa, mod 65521 alınır. Ardından, b ile a toplanır ve bu sonuç da 65521'den büyük olursa, yine mod 65521 alınır.

Son olarak, b'nin 16 bit sola kaydırılmış değeri ile a'nın toplamı, Adler-32 özetini temsil eden 32 bitlik bir tamsayı olarak döndürülür.

Not: Kodda yer alan mesajı değiştirerek farklı mesajların Adler-32 özetlerini hesaplayabilirsiniz.

Adler-32 phyton kodu 2:

# import zlib and adler32

import zlib  

s = b'hesaplama.tv'  

# using zlib.adler32() method

t = zlib.adler32(s)  

print(hex(t))

Yukarıdaki kod aşağıdaki çıktıyı üretir.

0x1f7104c5

** Process exited - Return Code: 0 **

Press Enter to exit terminal