Merhaba Arkadaşlar Önceki Dersimizde İç İçe Şifreme Yapmanızı Önermiştik . Lakin , Bu Şifremenin Zayıf Yanı , Kırılabilecek Olmasıdır . Bu Kez Bir Önceki Yazımızdan Daha Güvenli Bir Şifreleme Yöntemi Paylaşıyoruz . Bunun İçin Kullanacağımız Fonksiyon password_hash() Fonksiyonu . Bu Fonksiyonu Daha Güvenli Yapan Özelliği Otomatik Olarak PHP 5 API Key Kullanması , Fonksiyon Default Olarak Size Özel Tanımlanmış PHP 5 API Key'i Kullanarak Şifreleme Yapıyor ve Bu Sayede Diğer Bilgisayarlarda Decode Fonksiyonu Çalışmıyor .
password_hash() fonksiyonunu 2 farklı şekilde kullanabiliriz .
1 - ) DEFAULT Modu : Bu Şifreleme Verdiğiniz Şifreyi Kendiliğinden Otomatik Olarak Şifreler . Bakalım Benim Bilgsayarımda Sonuç Ne Dönecek .
echo password_hash("kodogren", PASSWORD_DEFAULT);
?>
Evet Arkadaşlar Yukarıdada Gördüğünüz Gibi , kodogren Olarak Girdiğimiz Şifreyi Bize Ekran Çıktısı Olarak ;
$2y$10$E17FQuu5izFuTVqpfBq6Ou99sVH2h2WR0WLZ6ErusHw7qUc7ygGm2
Şeklinde Verdi , Sizde Deneyin Bakalım Ne Çıkacak :
2 - ) BCRYPT Modu : Bu Modda Bir Dizi Ataız ve Değer Olarak Bir Sayı Veririz , Örneğin Bu Sayı 13 Olsun , Bu Mod Sizin Verdiğiniz 13 Sayısını Baz Alarak Bir Şifreleme Yapar . Burada Kullabileceğiniz Değerler COST ve SALT'tır . COST Değeri Olarak 4-15 Değerleri Arasını Optimum Olarak Görmekteyim .
Bu Mod Sayesinde Aynı Metini 11 Farklı Şekilde Şifreleyebilirsiniz . API Keyinide Hesaba Katarsak 1 Şifre md5 , sha1 veya Benzer Fonksiyonların Tersinde 1 Sonuç Değil Binlerce Farklı Sonuç Verebilir . Default Modunda Bu Değer 10 Olarak Kabul Edilir ve Buna Göre Şifreleme Yapılır .
Şimdi Birde BCRYPT Moduna Örnek Verelim. ;
/**
*Önerilen Değer 12'dir .
* BCRYPT Sonuçları Daima 60 Karakterlik Stringlerdir .
*/
$ayar = [
'cost' => 13,
];
echo password_hash("kodogren", PASSWORD_BCRYPT, $ayar)."\n";
?>
Bu Kod için Bize Dönen Değer ;
$2y$13$wgg1gDkiKD2pba7zrNrnxubDPSLZ7mcoAADzDSi6DdDRjAQLT.FpK
Oldu . Sizde Deneyin Bakalım nelerle Karşılaşacaksınız :)
Önemli Notlar :
* - Bu Fonksiyon Size Pek Çok Açıcan hash() Fonksiyonunu Anımsatabilir . Fakat Aralarında Çokta Bir benzerlik Bulunmamaktadır ve hash() Fonksiyonu password_hash() Fonksiyonundan Çok Daha Güvensizdir .
* - PHP Geliştiricileri En Güvenli Şifreleme İçin password_hash() Fonksiyonunu Öneriyor .
* - password_hash , cost ve salt Birlikte Kullanımı ;
/**
* Not : Salt Aşağıdaki Fonksiyon ıle Random olarak Üretilmektedir
* Asla Statik (Değişmez) veya Sabit Salt Kullanmayın .
*/
$options = [
'cost' => 11,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
echo password_hash("kodogren", PASSWORD_BCRYPT, $options)."\n";
?>
* - password_verify() Fonksiyonu Ile Şifrenizin Doğru olup Olmadığını Kontrol Edebilirsiniz . Hemen Örneği Gösterelim ;
// See the password_hash() example to see where this came from.
$hash = '$2y$13$wgg1gDkiKD2pba7zrNrnxubDPSLZ7mcoAADzDSi6DdDRjAQLT.FpK';
if (password_verify('kodogren', $hash)) {
echo 'Şifre Doğru';
} else {
echo 'Şifre Yanlış';
}
?>
Tabiiki Bu Koduda Sizin İçin Denedik ve Şifre Doğru Yanıtını Aldık .
* - Password_hash'i Anlatan Ilk Site KodOgren.Org'dur :)
Şimdilik Belirteceklerimiz Bu Kadar . Bzi Takip Ettiğiniz İçin Teşekkürlerimizi Borç Biliriz :)
İyi Çalışmalar Dileriz .
Kaynak : KodOgren - PHP’de Güvenli Şifre Oluşturma vol.02 (password_hash)