私は、ログイン用のデータベースにユーザーパスワードを暗号化して保存するための最良かつ最も安全な方法を研究しています。私が出会った1つの記事、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()
は、コロンで区切られた値のリストを提供します。ここからどこへ行くのか、あるいはこのソースコードを使う価値があるのかどうかはわかりません。