登录授权,如何检查密码是否与SALT HASH匹配 – PHP MySQL

我目前正在开展一个学校项目,最近我在完成登录授权方面没有取得任何进展.我正在使用HASH和SALT注册新用户.我找不到任何能让我感到满意的资源,所以我决定在这里开个账户来问我自己的问题.

这是我的注册脚本:

    $username = $_POST['username'];
    $email = $_POST['email'];
    $first = $_POST['fname'];
    $last = $_POST['lname'];
    $salt = crypt("sha512", false);
    $pass = $_POST['password'];
    $password = hash("sha512", $salt . $pass . $salt, false);

$sql = "INSERT INTO `users` (`username`, `email`, `fname`, `lname`, `salt`, `password`) VALUES ('$username', '$email', '$first', '$last', '$salt', '$password')";

然后我有一个checklogin.php脚本,它是我的索引页面上的action =“checklogin.php”,这是登录页面.这是完整的脚本:http://pastebin.com/tKrsHaFU(粘贴bin)

我的问题是如何验证我的用户来到index.php页面(登录表单)与数据库中已有的用户请记住我有密码的盐和哈希.

最佳答案
首先:

$salt = crypt("sha512", false);

这会产生静态盐,即没有变化.要生成更好的一个:

$salt = uniqid(mt_rand(), true); // the paranoid use openssl_random_pseudo_bytes()

要验证记录,您的SQL将变为:

$sql="SELECT * FROM $tbl_name WHERE username='$myusername'";
$result=mysql_query($sql);
// ...
if ($count==1) {
    $row = mysql_fetch_assoc($result);
    if (hash('sha512', $row['salt'] . $_POST['mypassword'] . $row['salt']) == $row['password']) {
        // validation passed, rejoice!
    }
}

但是,你应该看看这里:How do you use bcrypt for hashing passwords in PHP?

转载注明原文:登录授权,如何检查密码是否与SALT HASH匹配 – PHP MySQL - 代码日志