Az Önce Sitemde Yazdığım Yazıyı Burada Paylaşmak Istedim , Sebebi İse Şu An PHP'de En Güvenli Şifreleme Olması ve Türkçe Kaynağı Bulunmaması . Umarım İşinize Yarar , Sorularınızı Buradan veya Sitem Üzerinden Yöneltebilirsiniz :)

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)