我正在研究将用户密码加密并存储在数据库中以进行登录的最佳和最安全的方法。我遇到的一篇文章Salted Password Hashing - Doing it Right提供了一组看起来相当复杂的密码加密和检查函数。
我了解代码的工作原理,但文章还提到不仅将散列密码存储在数据库中,还将盐存储在数据库中。使用给定的代码,我将如何去做?例如:
// User registers with username and password; assume they're already validataed
$hash = create_hash($password_entered);
$password_hash = $hash[HASH_PBKDF2_INDEX];
$salt = $hash[HASH_SALT_INDEX];
$PDO = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password);
$statement = $PDO->prepare('INSERT INTO users (username, password, user_salt)
VALUES (:username, :password; :user_salt)');
$statement->execute(array(
':username' => $username_entered,
':password' => $password_hash,
':user_salt' => $salt,
));
这似乎是正确的......但是,在验证登录时,我不确定要检查登录表单中输入的密码的内容。返回的已编译哈希create_hash()
给出了一个以冒号分隔的值列表。我只是不确定从这里去哪里,或者这个源代码是否值得使用。