我已经开始着手制作登录系统并使用 crypt 函数对密码进行编码。我的问题是,当我使用用户名和密码注册用户时,一切正常,并将用户名密码和盐保存到数据库中。这是注册代码:
注意:目前这只是一个测试注册页面
$username=$_POST["username"];
$password=$_POST["password"];
$salt = substr(md5(microtime()),rand(0,26),15);
$hashedPass = crypt($password,'$2y$10$' . $salt);
$sql="INSERT INTO `users`(`id`, `username`, `password`, `salt`, `Perm_level`) VALUES (NULL,'$username','$hashedPass','$salt','test')";
$result=mysql_query($sql);
它加密它正确所以一个真实的例子是密码测试出来: $2y$10$d395985a2ca993f$$$$$$.k8lxPkUCenMKsOJ6V8tdO6Pl/Gl1/OW
它的盐是:
d395985a2ca993f
当我登录时,虽然我将盐从数据库中拉出并尝试以相同的方式重新加密,但我得到了不同的加密密码......盐是正确的,密码的第一部分也是如此,所以这部分“$2y$10$d395985a2ca993f$$$$$$$。”
下面是用于登录的代码:
$sql="SELECT * FROM `users` WHERE username='$user'";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result)){
$salt=$rows['salt'];
}
$hashedPass = crypt($password,'$2y$10$' . $salt);
$sql="SELECT * FROM `users`WHERE username='$user' AND `password` = '$hashedPass'";
$result=mysql_query($sql);
if($result) {
if(mysql_num_rows($result) == 1) {
echo "Successful Login";
}
}
对于登录页面,盐是正确的,但这是经过哈希处理后的密码:$2y$10$d395985a2ca993f$$$$$$.ccy3PKl.TsG26FWJBFXKmpQ3wtk4AqC
第一部分到句号是正确的,只是后半部分不同
我曾尝试将盐设置为手动盐,例如 abc 或 123,仅用于登录和注册页面的测试,但我仍然遇到相同的错误