Python İle SHA-256 Hash Algoritmasını Kullanarak Şifreleme Uygulaması

0 2.228

Bu makalemizde Python’da SHA-256 Hash algoritmasını kullanarak bir şifreleme algoritmasının nasıl yapıldığını ayrıtılı biçimde yazıyoruz. Python ve PyCryptodome kütüphanesini kullanarak gerçekleştiremiz uygulamanın kodlarına geçmeden önce hash nedir? sha-256 algoritması nasıl çalışır? sorularına cevap verip konunun temelini anlatmaya çalışacağız.

Temel Kavramlar

Hash Nedir?

Şifreleme ve veri bütünlüğü tespit edilmesi amacıyla teknolojinin birçok farklı alanında kullanılan hash algoritmaları Bitcoin (BTC) gibi kripto para birimlerini oluşturmakta ta kullanılıyor.

Girilen veriyi, sabit uzunlukta çıktıya dönüştüren matematiksel işleme hash denir. Bu işlemin amaçlarından biri, verinin gizlenmesidir. Söz gelimi, web sitelerine üye olurken yazılan şifreler hash’e dönüştürülerek veri tabanına yazılır. Bu sayede veri tabanını inceleyen kişi kullanıcının şifresini bilemez.

Bir diğer kullanım amacı ise verinin güvenli özetinin oluşturulmasıdır. Girdi verisi ne kadar uzun olursa olsun çıktı daima aynı uzunlukta olacağından, hash kodu özet amaçlı saklanabilir.

SHA-256 algoritması nedir?

Bitcoin’de kullanılan SHA (Secure Hash Algorithm – Güvenli Hash Algoritması); ABD Ulusal Güvenlik Ajansı (National Security Agency – NSA) tarafından geliştirilen hash algoritmaları serisinin adıdır.

Bu standart 1993 yılında SHA-0 ile kullanılmaya başlanmış, 1995 yılında geliştirilen SHA-1 ile performansı artırılmıştır. Tespit edilen çeşitli güvenlik açıklarının ardından 2004 yılında SHA-2 standardı geliştirilmiştir. SHA-2 standardı; SHA-224, SHA-256, SHA-384 ve SHA-512 gibi alt kümelere sahiptir.

SHA-256’nın özelliği verileri standart bir hale ve büyüklüğe çevirmesidir. Veriler farklı boyutlarda ve büyüklüklerde olabilir. Sonuç her zaman aynı büyüklükte ve yapıda olacaktır. Bu 256 bit (32 byte – 64 hexadecimal) boyutundadır ve 256 hash de denir. SHA-256’da veriler hash değerlerine dönüştürülür fakat bu işlem tek yönlüdür, yani hash değerleri verilere geri çevrilemez.

Burada dikkat edilmesi gereken bir diğer nokta hash değerlerinin karmaşık düzenleri nedeniyle önceden tahmin edilememesi veya birbirine çok benzer verilerin sonuçlarının birbirinden tamamen farklı olması. Yani hash değerlerinin önceden tahmin edilmesi imkansızdır. Veriler üzerindeki en küçük bir değişiklik çıkan hash değerinin tamamen farklı olmasına neden olacaktır. Buna rağmen SHA-256 deterministik bir işlemdir. Yani aynı veri üzerindeki hash değerlerinin hesaplaması her zaman aynı sonucu verecektir.

SHA-256 Algoritaması Nasıl Çalışır?

Bu algoritamanın nasıl çalıştığını alttaki gif animasyondan görebilirsiniz. Kaynak : https://github.com/in3rsha/sha256-animation

Python İle SHA-256 Hash Algoritmasını Kullanarak Şifreleme Uygulaması 1

SHA-256 Algoritması Nasıl Çalışır Videosu

Python Şifreleme Uygulamasına Giriş

Gerekli Kütüphanelerin Yüklenmesi

Bu yazımızda, Python ve PyCryptodome modülünü kullanarak bir mesajın özetini hesaplamak için SHA-256 algoritmasını kullanmayı öğreneceğiz .

Sen modül yükleme kontrol edebilirsiniz burada . Pip ile sadece aşağıdaki komutu çalıştırmamız gerekir:

pip install pycryptodome

Kütüphane tarafından desteklenen SHA-256 özellikleriyle ilgili belgeler için lütfen burayı kontrol edin .

Python Şifreleme Uygulaması Kodları

İlk yapacağımız şey SHA256 modülünü pycryptodome kütüphanesinden içe aktarmaktır .

from Crypto.Hash import SHA256

Bundan sonra, içeri aktardığımız SHA256 Hash sınıfından new fonksiyonu ile yeni bir nesne ireteceğiz.  Bu nesneyi dizemizi hash etmek için kullanacağız.

İsteğe bağlı olarak, birleştirilecek verinin new() fonksiyonunun girişi olarak geçebiliriz. Bununla birlikte, işlevi herhangi bir parametre olmadan da çağırabilir ve daha sonra nesnesimize bir yöntem çağırarak verileri iletebiliriz. Bu ikinci yaklaşımı takip edeceğiz.

hashObject = SHA256.new()

Şimdi, hash edilecek mesajı belirtmek için SHA-256 Hash nesnemizdeki update() yöntemini çağırıyoruz . Girdi olarak, bir bayt dizesi veya bir bayt dizisi olarak özetlemek istediğimiz iletiyi iletmemiz gerekir. Bayt dizesi olarak geçireceğiz.

hashObject.update(b'jn7.net')

Daha sonra, elde edilen mesaj özetinin doğru olup olmadığını doğrulamak için, mesajın özetini onaltılık biçimde almak için bu çevrimiçi aracı kullanacağız . Sonuçla birlikte bir değişken tanımlayacağız.

expectedDigest = "90a1709446d6daa0d9383cf56f1d85d0fa5d20e3a61012a9e7413c9d9384cbe9"

İleti özeti elde etmek için , karma iletinin ikili özeti döndüren digest() yöntemini kullanabiliriz . Bununla birlikte, bu bizim için yorumlanması kolay olmayan bir bayt biçiminde döndürür.

Bunun yerine onaltılık yöntemi kullanacağız . Bu yöntem, karma iletinin özetini onaltılı biçimde (küçük harfli) bir dize olarak döndürür. Doğrudan isteme yazdırabiliriz.

print (hashObject.hexdigest())

Ayrıca, özeti beklediğimiz (çevrimiçi araçtan elde edilen) ile karşılaştıracağız. Her ikisi de küçük harfli onaltılık dizeler olarak gösterildiğinden, doğrudan bir karşılaştırma yapabilir ve sonucu yazdırabiliriz.

print (hashObject.hexdigest() == expectedDigest)

Python İle Şifreleme Uygulaması Kodun Tamamı

Son kod aşağıda görülebilir.

from Crypto.Hash import SHA256


hashObject = SHA256.new()
hashObject.update(b'TechTutorialsX')


expectedDigest = "90a1709446d6daa0d9383cf56f1d85d0fa5d20e3a61012a9e7413c9d9384cbe9"


print (hashObject.hexdigest())
print (hashObject.hexdigest() == expectedDigest)

Uygulamayı Test Etme Çalıştırma

Uygulamamızı kullandığımız Python geliştirme ortamında çalıştırdığımızda elde ettiğimiz sonuç alttaki gibi olması gerekiyor.
python şifreleme uygulaması
Bu sayede Python ile SHA-256 Hash algoritaması kullanılarak basit bir şifreleme uygulaması geliştirdik.
Python örneklerine ve python derslerine sitemizden erişebilirsiniz.
Yorumlarınızı bekliyoruz.
Kaynak Cointelegraph Medium Techtutorialsx
Cevap bırakın

E-posta hesabınız yayımlanmayacak.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bununla iyi olduğunuzu varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul etmek Mesajları Oku