PHP 5.5 ile ben yeni, yerleşik bir çözüm kullanmak önermek istiyorum köşeyi (ne tarif, aşağıya bakın hatta önceki sürümleri için kullanılabilir): password_hash()
and password_verify()
. It provides several options in order to achieve the level of password security you need (for example by specifying a "cost" parameter through the $options
dizisi)
<?php
var_dump(password_hash("my-secret-password", PASSWORD_DEFAULT));
$options = array(
'cost' => 7, // this is the number of rounds for bcrypt
// 'salt' => 'TphfsM82o1uEKlfP9vf1f', // you could specify a salt but it is not recommended
);
var_dump(password_hash("my-secret-password", PASSWORD_BCRYPT, $options));
?>
döndürür
string(60) "$2y$10$w2LxXdIcqJpD6idFTNn.eeZbKesdu5y41ksL22iI8C4/6EweI7OK."
string(60) "$2y$07$TphfsM82o1uEKlfP9vf1fOKohBqGVXOJEmnUtQu7Y1UMft1R4D3d."
Gördüğünüz edebileceğiniz gibi, dize seçeneklerinde belirtilen yanı sıra maliyet tuz içerir. Ayrıca, kullanılan algoritma içerir.
Şifreyi kontrol ederken ücretsiz password_verify()
işlevini kullanırken Bu nedenle, (örneğin, kullanıcı günlükleri ne zaman), bu parola karma kendisinden gerekli kripto parametreleri çıkartacaktır.
Bir tuz belirterek değilken tuz rasgele oluşturulur, çünkü oluşturulan parola hash password_hash()
her çağrısı üzerine farklı olacaktır. Bu nedenle yeni oluşturulan biriyle bir önceki karma karşılaştıran bile doğru şifre için, başarısız olur.
Bu gibi çalışır doğrulanıyor:
var_dump(password_verify("my-secret-password", '$2y$10$BjHJbMCNWIJq7xiAeyFaHOGaO0jjNoE11e0YAer6Zu01OZHN/gk6K'));
var_dump(password_verify("wrong-password", '$2y$10$BjHJbMCNWIJq7xiAeyFaHOGaO0jjNoE11e0YAer6Zu01OZHN/gk6K'));
var_dump(password_verify("my-secret-password", '$2y$07$TphfsM82o1uEKlfP9vf1fOKohBqGVXOJEmnUtQu7Y1UMft1R4D3d.'));
var_dump(password_verify("wrong-password", '$2y$07$TphfsM82o1uEKlfP9vf1fOKohBqGVXOJEmnUtQu7Y1UMft1R4D3d.'));
Ben programcı uygun bir uygulamaya koymak zorundadır düşünce miktarını azaltır gibi bu yerleşik işlevleri sağlayan yakında veri hırsızlığı durumunda daha iyi şifre güvenliğini sağlayacağını umuyoruz.
5.5 's PHP verecek küçük bir kütüphane (bir PHP dosyası) var password_hash
PHP 5.3.7 +: https://github.com/ircmaxell/password_compat