登录授权,如何检查密码是否与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? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |