🔐 Python ile Şifreleme (Hashing) Kod Örneği

📌 Giriş

Günümüzde veri güvenliği her zamankinden daha fazla önem kazanmış durumda. Özellikle internet çağında, kişisel verilerin ve hassas bilgilerin korunması kritik bir hale geldi. İşte bu noktada şifreleme (encryption) ve hashing (özetleme) teknikleri devreye girer. Bu yazıda Python programlama dili kullanılarak hashing işlemlerinin nasıl yapılacağını örnek kodlarla detaylı bir şekilde inceleyeceğiz.

🧠 Hashing Nedir?

Hashing, bir veri bütünlüğü kontrolü ve kimlik doğrulama amacıyla kullanılan tek yönlü bir şifreleme yöntemidir. Girdi olarak alınan veriyi sabit uzunlukta benzersiz bir diziye dönüştürür. En çok bilinen hashing algoritmaları:

  • MD5
  • SHA-1
  • SHA-256
  • SHA-512

Unutma: Hashing işlemi geri döndürülemezdir. Yani şifrelenmiş veriden orijinal veriye ulaşmak mümkün değildir.


📚 Hashing Ne İçin Kullanılır?

  • Kullanıcı şifrelerinin güvenli bir şekilde saklanması
  • Dosya bütünlüğü kontrolü
  • Dijital imzalar
  • Blockchain uygulamaları

🛠️ Python’da Hashing Nasıl Yapılır?

Python’un hashlib kütüphanesi, hashing algoritmalarını kullanmak için mükemmel bir araçtır. Bu kütüphane ile MD5, SHA-1, SHA-256 gibi popüler algoritmalar kolayca kullanılabilir.

🔍 Gerekli Modül

pythonCopyEditimport hashlib

✅ Örnek 1: MD5 Hashing

pythonCopyEditimport hashlib

def md5_hash(veri):
    sonuc = hashlib.md5(veri.encode())
    return sonuc.hexdigest()

sifre = "123456"
hashli_sifre = md5_hash(sifre)
print("MD5 ile hashlenmiş şifre:", hashli_sifre)

📌 Açıklama:

  • encode() fonksiyonu, string’i byte formatına çevirir.
  • hexdigest(), hash sonucunu hexadecimal olarak verir.

🧾 Çıktı:

nginxCopyEditMD5 ile hashlenmiş şifre: e10adc3949ba59abbe56e057f20f883e

⚠️ Not: MD5 artık güvenli kabul edilmiyor. Modern sistemlerde SHA-256 veya SHA-512 tercih edilmelidir.


✅ Örnek 2: SHA-256 ile Hashleme

pythonCopyEditdef sha256_hash(veri):
    sonuc = hashlib.sha256(veri.encode())
    return sonuc.hexdigest()

sifre = "gizli_sifre"
hashli_sifre = sha256_hash(sifre)
print("SHA-256 ile hashlenmiş şifre:", hashli_sifre)

🧾 Çıktı:

CopyEditSHA-256 ile hashlenmiş şifre: b28d2e15f8e1c17337d8a4f42018f944...

🔐 Salt Kullanarak Daha Güvenli Hashleme

Salt, bir verinin sonuna ya da başına rastgele bir karakter eklenerek hash işleminin daha güvenli hale getirilmesidir. Bu yöntem rainbow table saldırılarına karşı koruma sağlar.

✅ Örnek 3: Salt ile SHA-256 Hashleme

pythonCopyEditimport os

def sha256_with_salt(veri):
    salt = os.urandom(16)
    hasher = hashlib.sha256()
    hasher.update(salt + veri.encode())
    return hasher.hexdigest(), salt

sifre = "guvenliSifre"
hashlenmis, salt = sha256_with_salt(sifre)
print("Salt'lı SHA-256 Hash:", hashlenmis)
print("Salt Değeri:", salt.hex())

🧪 Hash Kontrolü Nasıl Yapılır?

Kullanıcı giriş yaptığında şifreyi tekrar hashleyip, veritabanındaki hash ile karşılaştırmak gerekir.

pythonCopyEditdef verify_password(input_password, stored_hash):
    return sha256_hash(input_password) == stored_hash

🔐 PBKDF2 ile Hashleme

Python’un hashlib kütüphanesi aynı zamanda PBKDF2 (Password-Based Key Derivation Function 2) desteği de sunar. Bu yöntem brute-force saldırılara karşı daha dirençlidir.

✅ Örnek 4: PBKDF2 ile Hashleme

pythonCopyEditimport hashlib
import os

def pbkdf2_hash(password):
    salt = os.urandom(16)
    hash_result = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, 100000)
    return hash_result.hex(), salt.hex()

sifre = "karmasikSifre"
hash_sonucu, salt = pbkdf2_hash(sifre)
print("PBKDF2 Hash:", hash_sonucu)
print("Salt:", salt)

🔒 Gelişmiş Hashleme Yöntemleri ve Güvenlik Uygulamaları


🔹 1. Bcrypt ile Hashleme (Parola Güvenliği İçin İdeal)

bcrypt, parola güvenliği için özel olarak tasarlanmış bir hashleme algoritmasıdır. Zamanla yavaşlatılabilir ve brute-force saldırılarına karşı oldukça dirençlidir.

✅ Örnek Kod:

pythonCopyEditimport bcrypt

# Şifre oluşturma
sifre = b"guvenliParola"
salt = bcrypt.gensalt()
hashlenmis = bcrypt.hashpw(sifre, salt)

print("Hashlenmiş Şifre:", hashlenmis)

# Şifre kontrolü
dogru_mu = bcrypt.checkpw(b"guvenliParola", hashlenmis)
print("Şifre Doğru mu?:", dogru_mu)

📌 Not:

  • bcrypt.hashpw() ile şifreyi hashliyoruz.
  • checkpw() fonksiyonu kullanıcıdan gelen girdiyi hash ile karşılaştırır.

🔹 2. Argon2 (En Güncel ve Güvenli Yöntemlerden Biri)

Python’da argon2-cffi kütüphanesi ile kullanılabilir. Hem CPU hem bellek kullanımıyla brute-force saldırılarını engeller.

✅ Kurulum:

bashCopyEditpip install argon2-cffi

✅ Örnek Kod:

pythonCopyEditfrom argon2 import PasswordHasher

ph = PasswordHasher()
hashli = ph.hash("gizliParola")

try:
    ph.verify(hashli, "gizliParola")
    print("Doğrulama başarılı!")
except:
    print("Şifre eşleşmedi.")

🛡️ Gerçek Dünya Uygulaması: Kullanıcı Kayıt ve Giriş Sistemi

Bir kayıt/giriş sisteminde kullanıcı şifresini hashleyip, veri tabanına kaydederiz. Giriş esnasında ise şifreyi tekrar hashleyip karşılaştırırız.

✅ Kayıt:

pythonCopyEditdef kayit_ol(username, password):
    hashli_sifre = sha256_hash(password)
    # Veritabanına username ve hashli_sifre kaydedilir

✅ Giriş:

pythonCopyEditdef giris_yap(username, girilen_sifre, kayitli_hash):
    if sha256_hash(girilen_sifre) == kayitli_hash:
        print("Giriş başarılı")
    else:
        print("Hatalı şifre")

🧱 Hashing ile Dosya Bütünlüğü Kontrolü

Hashing sadece şifreler için değil, dosya değişikliklerini takip etmek veya virüs bulaşıp bulaşmadığını anlamak için de kullanılır.

✅ Dosya SHA-256 Hesaplama:

pythonCopyEditdef dosya_sha256(dosya_adi):
    sha256 = hashlib.sha256()
    with open(dosya_adi, 'rb') as dosya:
        while chunk := dosya.read(4096):
            sha256.update(chunk)
    return sha256.hexdigest()

print(dosya_sha256("ornek.txt"))

🌍 Hashing Nerelerde Kullanılır?

AlanAçıklama
💾 VeritabanıKullanıcı parolaları hashlenmiş şekilde saklanır
🧾 BelgelerBelge değişikliklerini tespit etmek için
🔒 Dijital imzalarBelgelerin güvenilirliğini teyit etmek için
💰 Kripto paralarBlockchain teknolojisinin temelinde hash fonksiyonları vardır
🎮 OyunlarDosya bütünlüğünü korumak ve hileleri engellemek için

🧠 Hash ile Şifreleme Arasındaki Fark Nedir?

ÖzellikHashingŞifreleme
Geri döndürülebilir mi?❌ Hayır✅ Evet
AmaçVeri doğrulamaVeri gizleme
Kullanım alanıParola saklamaGizli iletişim
Örnek algoritmalarSHA256, MD5, bcryptAES, RSA

💡 İpuçları ve En İyi Uygulamalar

  • 🔑 SHA-256 ve üstü algoritmalar kullanın
  • 🧂 Salt olmadan şifre hashlemeyin
  • ⛏️ Brute-force’a karşı bcrypt veya argon2 tercih edin
  • 🕵️‍♂️ Hash’leri veri tabanında salt ile birlikte saklayın
  • 🔄 Güncel güvenlik standartlarını takip edin

Review Python ile Şifreleme (Hashing) Kod Örneği.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir