php的password_hash和password_verify看了一遍还是不行

2024-04-21

UPDATE所以这是一个令人尴尬的愚蠢承认,但问题是我存储在数据库中的哈希值是“密码”的哈希值包括引号,我写的查询没有问题,问题出在椅子和键盘之间。

所以这是一个经常被问到的问题,我查遍了 stackoverflow 和 google 试图找到答案,但到目前为止都没有成功。

我有一个“代理”表,其中包含分配给每个代理的登录名和密码。密码字段是长度为 255 的 varchar。

这是我的 php 代码:

     $conn = new mysqli( "localhost", "VABEN", "**********", "VABen" );
     if( $conn->connect_error )
     {
        die( "Connection failed!" . $conn->connect_error );
     }
     $username = $_POST["username"];
     $password = $_POST["password"];

     $s = $conn->prepare( "SELECT `agent_password` FROM `VABen`.`agents` WHERE `agent_login`=?" );
     $s->bind_param( "s", $username );
     $s->execute();

     $hash = $s->get_result();
     $hash = $hash->fetch_array( MYSQLI_ASSOC );

     $testpw = password_hash( 'password', PASSWORD_DEFAULT );
     echo "Comparing submitted password to locally created hash $testpw which has a length of " . strlen($testpw) . "<br>";
     if( password_verify( $password, $testpw ) )
     {
        echo "Password '$password' matches with hash $testpw<br>";
     }
     else
     {
        echo "Password '$password' does not match with hash $testpw<br>";
     }
     echo "<br>";

     echo "Supplied Password: '$password'<br>";
     echo "Queried Hash: " . $hash['agent_password'] . " which has a length of " . strlen( $hash['agent_password'] ) . "<br>";
     echo "Result of password_verify: ";
     if( password_verify( $password, $hash['agent_password'] ) )
        echo "true<br>";
     else
        echo "false<br>";

我很茫然。它似乎只在我提供本地创建的password_hash 副本时才起作用,如果我随后在MySQL 数据库中使用该本地创建的副本,则会失败。

有任何想法吗?


存储哈希值

你检查过了吗agent_password正在存储由以下方式生成的哈希值:

password_hash( $password, PASSWORD_DEFAULT );

检查 PDO 标准

可能没有效果,但值得遵循不同实现的标准bindParam。如果您正在使用?方法,那么:

 $s->bind_param( 1, $username );

您的脚本中有几个奇怪的 PDO 实现,请尝试调整:

 $s->execute();

 //$hash = $s->get_result();
 //$hash = $hash->fetch_array( MYSQLI_ASSOC );
 $hash = $s->fetchColumn();

更改后续调用$hash['agent_password']只是$hash反而。

测试基本操作

测试以下内容:

// $password = $_POST["password"];
$password = "password";

然后,还尝试存储该哈希值,并在最终验证步骤之前从 mysql 再次检索它。

Finally

我深深怀疑存储的内容agent_password实际上不是一个经过哈希处理的密码password_hash.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php的password_hash和password_verify看了一遍还是不行 的相关文章

随机推荐

  • 远程服务器返回错误:(407) 需要代理身份验证

    当我调用网络服务时出现此错误 远程服务器返回错误 407 需要代理身份验证 我了解了总体思路 并且可以通过添加来使代码正常工作 myProxy Credentials NetworkCredential user password doma
  • Java中的paint()和repaint()

    我可能花了两个小时浏览和阅读这些方法和 Graphics 类 也许我很愚蠢 哈哈 但我只是不理解它们 它们是做什么用的 我知道他们应该重绘或更新屏幕上的组件 但我从来不明白为什么需要这样做 我对此很陌生 例如 如果我在屏幕上移动 JLabe
  • 锁定 HttpRuntime.Cache 以进行延迟加载

    我们有一个运行 NET 2 0 的网站 并开始使用 ASP Net HttpRuntime Cache 来存储频繁数据查找的结果 以减少数据库访问 Snippet lock locker if HttpRuntime Cache cache
  • 网站不会在移动设备上滚动[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个网站 http www skeletoncru com 不会在移动设备上滚动 我以前见过这个问题 但这似乎不是通常的嫌疑人 我没主意了
  • Sql语法:select without from子句作为select中的子查询(subselect)

    在编辑一些查询以添加没有值的列的替代项时 我不小心写了这样的内容 这是简单的版本 SELECT id SELECT name FROM t 令我惊讶的是 MySQL 没有抛出任何错误 而是完成了查询 给出了我预期的结果 name列值 我试图
  • 在 Odoo 10 的表单视图中向 One2Many 树添加多条记录

    我目前正在 Odoo 10 中创建一个小部件 它有一个按钮 用户可以单击此按钮 然后会出现一个对话框 允许用户选择多个记录并将它们添加到相应的 One2Many 字段 例如 我可以选择多个产品并将它们添加到新的销售订单中 相应的订单行将添加
  • 如何在rails中执行任意参数化SQL

    出于性能原因 我需要在 Rails 模型中编写一个新方法来执行一些任意 SQL UPDATE table SET col1 AND col2 WHERE id 我明白我可以使用ActiveRecord Base connection exe
  • 在 R 中撤消布局

    我最初创建了一个箱线图和直方图组合的图 为此我设置了 nf lt layout mat matrix c 1 2 2 1 byrow TRUE height c 1 3 par mar c 2 2 1 1 Draw box plot Dra
  • Jawbone UP API oAuth 和访问令牌

    我今天开始深入研究 Jawbone 的 UP API 整个身份验证过程中一切似乎都很顺利 问题是 一旦我取回访问令牌 它始终是相同的令牌 它在我的任何请求中都不起作用 并且我无法使用刷新令牌端点更改它 oAuth 设置 url params
  • 提高谷歌地图绘制长路径的性能

    这个问题和这个不一样另一个 https stackoverflow com questions 7503848 improving google maps performance因此 我观察到原生谷歌地图应用程序在地图上绘制很长的距离 当缩
  • PyQt QtWebKit loadFinished 未调用

    我有这个脚本 当它准备好时我想用它做更多的事情 from PyQt4 import QtCore QtGui QtWebKit class WebViewCreator def init self self view QtWebKit QW
  • 为什么 JavaScript 换行符在 HTML 中不起作用?

    我有以下内容 你们可能都知道 n不起作用 我必须使用 br 反而 如果我链接到外部 它也不起作用 js文件 这是我的问题 为什么不 n work 为什么 br 甚至工作 脚本标签内的所有内容难道不应该是严格的 JavaScript 而不是
  • openaigym env.P,AttributeError“TimeLimit”对象没有属性“P”

    我目前正在阅读 Sudharsan Ravichandiran 的 Python 强化学习实践 在我遇到的第一个示例中 遇到了以下 AttributeError AttributeError TimeLimit object has no
  • 将文本+图标组合成一个自动换行的小部件

    我正在尝试为我的应用程序创建一个帮助页面 我想简单地写 按 ICON 刷新分数 或在设置抽屉中启用自动刷新 其中 ICON 是 Icons refresh 如果屏幕不适合 则将整个内容自动换行 如果都是文本 我会简单地将其包装在灵活的小部件
  • 如何修复这个损坏文件的 PHP 下载脚本?

    我有一个强制下载脚本 可以在 PDF 和纯文本中产生良好的结果 并且在 ZIP 存档中半正常 它们在 Windows 中工作 而不是在 Linux 中工作 但是 应用程序文件和图像都失败 这些构成了我必须处理的绝大多数文件 正如我在此处看到
  • Django ORM 能否以与后端无关的可靠方式存储无符号 64 位整数(又名 ulong64 或 uint64)?

    我见过的所有文档都暗示你might能够做到这一点 但没有任何官方 w r t ulong64 uint64 字段 在这个领域有一些现成的选项看起来很有前途 BigIntegerField 几乎 但签名 PositiveIntegerFiel
  • Bootstrap4使卡头高度相同

    以 Bootstrap 4 的定价模板为例 假设我有不同文本长度的卡片标题 因此在某些屏幕分辨率下 卡片标题的高度会变得不同 我想确保它们始终具有相同的高度 div class container div class card deck m
  • ERROR 发送和传输仅适用于应付地址类型的对象,不适用于地址

    function finalizeRequest uint index public restricted Request storage request requests index require request approvalCou
  • HTML/ CSS:A href 超出链接图像 - 如何避免?

    我将三个 HTML 元素排成一行使用内联块 https stackoverflow com questions 13290085 basic html place images in one row with same distance f
  • php的password_hash和password_verify看了一遍还是不行

    UPDATE所以这是一个令人尴尬的愚蠢承认 但问题是我存储在数据库中的哈希值是 密码 的哈希值包括引号 我写的查询没有问题 问题出在椅子和键盘之间 所以这是一个经常被问到的问题 我查遍了 stackoverflow 和 google 试图找