【发布时间】:2023-03-18 01:54:01
【问题描述】:
已解决
我的注册表有一个奇怪的问题。 JS 做了一些奇怪的事情,即使 password_verify 在登录时工作,哈希在某些情况下是不同的......现在我修复了我的代码,它现在可以工作了!谢谢大家!
已解决
我正在认真地想弄清楚为什么我的 password_verify 代码已经 4 天没有工作了,我真的很困惑和生气......
首先我必须说会话已经开始,其他一切都在正常工作。
但是当我尝试创建 password_verify 脚本时,它仍然回显错误...
数据库中的字段名为password,并设置为varchar 255。
来自数据库的密码如下所示:
$2y$10$GEw0Ie6r/Udz2hgJVkCy.ut99NY5NE.h8LEvNM1gBizA1tY58iNa6
很好,应该是这个样子……
当我在我的页面上回显数据库密码时,它显示相同,所以很好。但是当我做password_verify 时,它不起作用。它显示password_verify 是假的......我不知道为什么,因为我100% 确定我在表单中输入的密码是正确的并且与db 密码匹配。但是,它不起作用,也没有像应有的那样回显“DONE”。
echo strlen 显示 60
echo $dbpassword 显示散列的数据库密码。
echo $passwordsubmitted 显示从表单正常输入的密码。
<?php
if(isset($_POST['changepassword'])){
if($_POST['username'] !== $_SESSION['username']){
echo "Invalid username";
}
else{
$stmtselectvalues = $mysqli->prepare("SELECT password FROM members WHERE username = ?");
$stmtselectvalues->bind_param('s',$_SESSION['username']);
$stmtselectvalues->execute();
$stmtselectvalues->bind_result($dbpassword);
$stmtselectvalues->store_result();
while($stmtselectvalues->fetch()){
$passwordsubmitted = $_POST['password'];
echo strlen($dbpassword)."<p>";
echo "Submitted password: ".$passwordsubmitted." and password from database: ".$dbpassword."<p>";
if(password_verify($passwordsubmitted, $dbpassword) == false){
echo "Invalid Password";
}
else{
echo "DONE!";
}
}
}
}
?>
<center>
<form method='POST'>
Username: <input type='text' name='username'><br>
Password: <input type='text' name='password'><br>
<input type='submit' name='changepassword'><br>
</form>
但是,当我使用此代码时,它正在工作,并且 echo 为“DONE”,这意味着 password_verify 为 true...
<?php
if(isset($_POST['changepassword'])){
if($_POST['username'] !== $_SESSION['username']){
echo "Invalid username";
}
else{
$dbpassword = password_hash("test", PASSWORD_BCRYPT);
$passwordsubmitted = $_POST['password'];
echo strlen($dbpassword)."<p>";
echo "Submitted password: ".$passwordsubmitted." and password from database: ".$dbpassword."<p>";
if(password_verify($passwordsubmitted, $dbpassword) == false){
echo "Invalid Password";
}
else{
echo "DONE!";
}
}
}
?>
<center>
<form method='POST'>
Username: <input type='text' name='username'><br>
Password: <input type='text' name='password'><br>
<input type='submit' name='changepassword'><br>
</form>
我真的不知道为什么会这样。有什么建议吗?
更新
注册输入为<input type='password' name='password'>
注册时提交的密码使用此代码进行哈希处理:
$password = $_POST['password'];
$passwordhash = password_hash($password, PASSWORD_BCRYPT);
【问题讨论】:
-
可以发一下函数
password_verify吗? -
@Populus - 功能?什么意思?
-
@Populus password_verify
-
@StevenTomko:该密码和种子的哈希值应该是“$2y$10$15trkRMpvZ2Fbm.0fZSwx.DjnbzDW5KPaNwiCUSMiPUGBwuuUM.t2”,你在数据库中的哈希值是错误的。
-
这确认,问题出在注册表单上(您没有散列字符串“密码”)。如果我们能看到调用
password_hash()函数的代码会很有帮助。
标签: php mysqli php-password-hash