Şifreleme Yöntemleri: password_hash() ve password_verify()

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Veritabanınız bir gün siber saldırıya uğrayabilir. Eğer şifreleri olduğu gibi saklıyorsanız, tüm kullanıcılarınızın hesapları tehlikeye girer. PHP'nin yerleşik şifreleme fonksiyonları, şifreleri "hash"leyerek onları geri döndürülemez ve okunamaz bir hale getirir.

1. Şifreyi Kaydetme: password_hash()​


Kullanıcı kayıt olurken veya şifresini değiştirirken bu fonksiyonu kullanırız. Bu fonksiyon, her seferinde benzersiz bir "salt" (tuzlama) değeri ekleyerek aynı şifre için bile farklı çıktılar üretir.

PHP:
<?php
$sifre = "kullanici_sifresi_123";

// Şifreyi hashle
// PASSWORD_DEFAULT: O anki en güncel ve güvenli algoritmayı (BCRYPT veya Argon2) kullanır.
$hashli_sifre = password_hash($sifre, PASSWORD_DEFAULT);

echo "Veritabanına kaydedilecek veri: " . hashli\_sifre;
// Çıktı şuna benzer: $2y$10eImiTXuWVxjM93uy5zGfueuicTT9n7XdzK0jSIqfXn.6A7978T3t.
?>

2. Şifreyi Doğrulama: password_verify()​


Kullanıcı giriş yapmak istediğinde, girdiği ham şifreyi veritabanındaki hashlenmiş veriyle karşılaştırmamız gerekir. Hashlenmiş veriyi geri çözemeyiz, ancak bu fonksiyon iki verinin birbiriyle uyumlu olup olmadığını söyler.

PHP:
<?php
$girilen_sifre = "kullanici_sifresi_123";
veritabanindaki_hash = &#39;$2y$10eImiTXuWVxjM93uy5zGfueuicTT9n7XdzK0jSIqfXn.6A7978T3t.';

if (password_verify($girilen_sifre, $veritabanindaki_hash)) {
echo "Giriş başarılı! Şifre doğru.";
} else {
echo "Hatalı şifre girdiniz.";
}
?>

Neden MD5 veya SHA1 Kullanmamalıyız?​


ÖzellikMD5 / SHA1password_hash (BCRYPT)
HızÇok Hızlı (Bu bir kusurdur)Yavaş (Saldırıyı zorlaştırır)
Rainbow TableKolayca kırılabilirKırılamaz (Tuzlama sabittir)
ÇakışmaYüksek riskYok denecek kadar az
GüvenlikZayıfMükemmel

3. Maliyet (Cost) Ayarı ile Güvenliği Artırmak​


password_hash fonksiyonunda üçüncü bir parametre kullanarak işlemcinin harcayacağı eforu belirleyebilirsiniz. Maliyet ne kadar yüksekse, bir saldırganın "brute-force" (kaba kuvvet) saldırısı yapması o kadar imkansız hale gelir.

PHP:
$options = [
'cost' => 12 // Varsayılan 10'dur. Artırmak güvenliği artırır ama sunucuyu yorar.
];
$hash = password_hash($sifre, PASSWORD_BCRYPT, $options);

4. Şifrenin Yenilenmesi Gerekiyor mu? (password_needs_rehash)​


Zamanla PHP güncellendikçe daha güçlü algoritmalar varsayılan hale gelir. Bu fonksiyon, kullanıcının mevcut hash değerinin yeni standartlara uyup uymadığını kontrol eder. Eğer uymuyorsa, kullanıcı giriş yaptığı anda şifresini yeni yöntemle tekrar hashleyip güncelleyebilirsiniz.

Sonuç​


Modern bir PHP geliştiricisi için password_hash() ve password_verify() ikilisi vazgeçilmezdir. Bu yöntem, veritabanı içeriği sızsa dahi kullanıcılarınızın gerçek şifrelerini koruma altında tutar. Şifreleme işlemlerinde her zaman en güncel PASSWORD_DEFAULT algoritmasını kullanmayı alışkanlık haline getirin.
 
Geri
Üst