加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 17:22:19 所属栏目:PHP教程 来源:网络整理
导读:我目前正在开展一个学校项目,最近我在完成登录授权方面没有取得任何进展.我正在使用HASH和SALT注册新用户.我找不到任何能让我感到满意的资源,所以我决定在这里开个账户来问我自己的问题. 这是我的注册脚本: $username = $_POST['username']; $email = $_POS
我目前正在开展一个学校项目,最近我在完成登录授权方面没有取得任何进展.我正在使用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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读