我创建了一个简单的登录/注册表单。注册的信息存储在.txt文件中(这只是为了教育目的,而不是实际使用)。
在将其放入the.txt文件之前,我正在对已注册的输入进行散列。当用户登录时,我希望使用password_verify检查哈希。如果哈希与登录输入相同,则将验证用户,因此应该登录。
对于当前代码,即使登录与存储在the.txt文件中的内容相同,它也直接跳到}and语句,该语句指出用户名和/或密码是不正确的。
编辑:如果我输入用户名为123,密码为123,则文本文件显示:
$2y$10$VeZB8AZmL9lAfRQ1qKBxEug8A3RrPxM9JlOAo9prw/UOWU4.XpdqC,$2y$10$kU5AvH4hTgE1cvHmTItIU.pnTsbYvKH9bLl3Bxfy4ig7QZKdVVV46,
我对PHP和编程非常熟悉,任何帮助都很感激:)
// GETS FORM INPUT
if(isset($_POST['username']) && $_POST['password']){
$username = $_POST['username'];
$password = $_POST['password'];
$hashName = password_hash($username,PASSWORD_DEFAULT);
$hashPass = password_hash($password, PASSWORD_DEFAULT);
}
// LOGIN
if($_POST['btn'] == 'Login'){
userExist($username, $password, $hashName, $hashPass);
}
// REGISTER
else if(($_POST['btn'] == 'Register')){
$fh = fopen("logininfo.txt", 'a') or die("Unable to open file");
$login = <<<_END
$hashName,$hashPass,
_END;
fwrite($fh, $login) or die("Unable to write to file");
fclose($fh);
}
//VERIFIES USER
function userExist($username, $password, $hashName, $hashPass){
$accounts = file_get_contents('logininfo.txt');
$accArray = explode(',', $accounts);
print_r($accArray);
if((password_verify($hashName, $accArray[0])) && (password_verify($hashPass, $accArray[1]))){
header('Location: index.php');
}else{
echo "username and/or password is incorrect";
}
}发布于 2022-02-23 18:29:23
这里的哈希太多了。
注册用户时,可以存储未散列用户名和使用password_hash()进行散列的密码。
登录时使用未散列用户名恢复该用户的哈希密码,然后使用password_verify()将用户提供的未散列密码与存储的哈希密码进行比较。
password_hash()向密码中添加一个随机盐,并将salt和生成的哈希存储在生成的字符串中。即使您使用相同的密码散列两次,每次也会得到不同的结果。
https://stackoverflow.com/questions/71242168
复制相似问题