当前位置: 首页 > 知识库问答 >
问题:

password_verify()密码匹配时返回false[重复]

蒋岳
2023-03-14

我正在创建一个用户可以登录的网站。当他们创建帐户时,我将哈希密码保存在数据库中。我正在尝试使用password_verify()来确认密码匹配,但它返回false。

为了确认它们匹配,我打印出用户输入的哈希版本和存储在数据库中的哈希密码。我知道一个常见的问题是数据库密码字段对于散列密码来说太小,但我尝试将其设置为VARCHAR(256)和TEXT,以确保存储整个散列密码。

if(isset($_POST['email'])){
     $email = strip_tags(mysqli_real_escape_string($conn, $_POST['email']));
     $password = strip_tags(mysqli_real_escape_string($conn, $_POST['passwd']));
     $sql = "SELECT email, passwd AS hashed_password FROM Accounts WHERE email = '$email'";

     $result = $conn->query($sql);
     $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
     //print the hashed password that is stored in the database
     echo  'stored in the database: '. $row['hashed_password']. '<br>';
     $hash = hash('sha512', $password);
     //print the hashed version of what the user typed in
     echo 'hashed version of what your submitted: '. $hash. '<br>';
     if( password_verify($password, $hash)){
         echo "true";
     }
     else{
         echo 'false';
     }

我希望password_verify()返回true,但它返回false

以下是我目前正在输出的内容:

存储在数据库中:1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75

您提交内容的散列版本:1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75

错误的

共有1个答案

潘泳
2023-03-14

password_verify()与函数password_hash()配合使用;

更改:

$hash = hash('sha512', $password);

到:

$hash = password_hash($password, PASSWORD_DEFAULT);
 类似资料:
  • 问题内容: 我正在使用a 检查我的哈希密码。我有PHP 5.5: 我上车了。我已经检查了posts的值和mysql user_password_hash返回。 我不知道为什么它返回假 有任何想法吗? 问题答案: 手册中的列长度可能是问题所在: 建议将结果存储在可扩展超过60个字符的数据库列中(255个字符是一个不错的选择)。 链接

  • 我试图解析这样的字符串; /^/^这是一个大/*这是一个粗体文本/-这是删除。我需要$/^和$之间的文本 在regexr和java regex tester上对regex进行了测试,并显示了它的工作状态。

  • 问题内容: 我正在用于在运行时更新json配置文件。有时,当模式在json文件中不匹配时,仍然会以返回码0退出。 返回0表示成功完成,但是如果找不到正确的模式并更新文件,为什么返回0?有没有解决方法? 谢谢! 问题答案: 如@cnicutar所评论,命令的返回码表示命令是否成功执行。与您在代码/脚本中实现的逻辑无关。 因此,如果您有: sed将返回,但是如果您编写一些语法/表达式错误,或者输入/文

  • 原始正则表达式:< code>[v]\d?\.\d 捕获字符串中的“v{N}.{n}”,其中{N}/{n}只是一个数字。我在代码(java)中尝试,但返回false。 代码: 控制台:

  • 问题内容: 我有以下代码: … 循环显示“ et al”,但对m.matches()的调用返回false。而且m.groupCount()返回2。有关发生了什么的任何帮助? 问题答案: 但是对m.matches()的调用返回false。 这是因为要求您将完整的输入与正则表达式匹配。 从Javadoc: 布尔布尔Match() 尝试根据图案匹配整个区域。如果匹配成功,则可以通过开始,结束和分组方法获

  • 我知道当对象是特定类的实例时,instanceof返回TRUE。例如: