私のウェブサイトにサインアップする場合、パスワードをハッシュ化しようとしていますが、うまくいきません。これは、サインアップ時にパスワードをハッシュするための私のコードです:
$escapedName = mysql_real_escape_string($_POST['user']);
$escapedPW = mysql_real_escape_string($_POST['password']);
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
$hashedPW = hash('sha256', $escapedPW . $salt);
次に、それをデータベースに挿入します (ハッシュ化されたパスワードとソルト)。たとえばSas
、次のソルトを使用してハッシュすると、次のようになります。
abac7ad23185ad19967f0d13e962197962782f0b7ec32d9889c27a93a9e800fa
これはハッシュされたパスワードです。
8ca5c5f31fafbf382533dbcbfc22b3635d776ec7770c7eac58d8ef9f1fa3613c
しかし、まったく同じパスワードとソルトを使用して、ログイン時にパスワードをハッシュしようとすると、これがハッシュされたパスになります。
6eb4b16444f18cee19db32bd29a39970e3019c5b1972a982ae4cb9a59642dffc
これは、ログインに使用するコードです。
$escapedName = mysql_real_escape_string($_POST['user']);
$escapedPW = mysql_real_escape_string($_POST['password']);
$saltQuery = mysql_query("SELECT salt FROM members WHERE user='{$escapedName}'");
while($result = mysql_fetch_assoc($saltQuery)) {
$salt = $result['salt'];
}
$hashedPW = hash('sha256', $escapedPW . $salt);
$sql = mysql_query("SELECT * FROM members WHERE user='$escapedName' AND pass='$hashedPW'; ");
while ($res = mysql_fetch_assoc($query2)) {
$username = $res['user'];
$PW = $res['pass'];
}
コードが多すぎないことを願っています。また、私の質問を理解していただけることを願っています。