微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP password_hash 不能跨浏览器或机器工作并返回 null

如何解决PHP password_hash 不能跨浏览器或机器工作并返回 null

PHP Version: 7.4

我正在使用 password_hash,但遇到了一个奇怪的问题。我的代码非常适合我,我可以使用 Chrome 登录我的网站而不会出现任何问题。但是,另一个尝试登录的人在使用 Chrome 时不断收到错误密码错误,因此我尝试在另一个浏览器中登录并开始收到相同的错误

我已将问题定位为使用 password_hashpassword_verify,它们分别返回 null 和 false。 password_verify 返回 false,因为它将空字符串与数据库中的有效密码字符串进行比较。

数据库中的密码类似于:$2y$10$pH87se8G0fP9bE/s6RtPReVDqn2qOqs0CA8BE90DLCD9RLtLdG74e

我的代码如下:

密码创建(仅用于 register.PHP):

$options = [ // pass hash options
    'cost' => 14,];
$pass = password_hash(base64_encode(hash("sha512",strval($_POST['password']),true),PASSWORD_DEFAULT,$options));

密码验证(用于 signin.PHP):

if(!password_verify(base64_encode(hash("sha512",true)),$fetch['password'])) {

正如我所说,这在 Chrome 中非常适合我,但不适用于任何其他浏览器,而且这不适用于任何浏览器上的任何其他人。

我也在其他网站上使用过这个系统,以前从未出现过问题,所以我不知道为什么会遇到这个问题。

有什么想法吗?

解决方法

我按照@Jeto (Jeto's Comment) 的建议删除了手动编码,从而解决了这个问题。

我的代码现在是这样的:

password_hash($_POST['password'],PASSWORD_DEFAULT)

password_verify($_POST['password'],$fetch['password'])

我遇到的问题仍然很不寻常,因为它有时会正常工作,但回归基础解决了问题(因为它经常这样做)。

谢谢杰托。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。