首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么php password_verify和password_hash使用不同的加密标识符?

为什么php password_verify和password_hash使用不同的加密标识符?
EN

Stack Overflow用户
提问于 2016-11-13 05:35:40
回答 1查看 832关注 0票数 6

经过一些故障排除后,我确定当我使用password_hash函数散列密码时,加密标识符是$2y$。但是,当我使用password_verify函数将存储的散列密码与用户输入密码进行比较时,password_verify将不会返回true。如果我使用https://www.bcrypt-generator.com/上的$2a$标识符生成一个新密码,并用它替换存储的散列密码,则返回true。

我希望有人能解释为什么password_hash($password,PASSWORD_DEFAULT)使用$2y$,而password_verify()使用$2a$。或者其他我在这里做错的事情。我是在运行PHP7.0.10版本的WAMP Server上本地这样做的。

下面是我遇到麻烦的代码示例($2y$标识符不会返回true)。

代码语言:javascript
复制
<?php
// $hashNotWorking came from password_hash("testing", PASSWORD_DEFAULT)."\n";
$hashNotWorking = '$2y$10$DNPos6f7Vo4Z2IrYU./eCObD7BMkwlkK9yiYjb0hvnI14B1dbFHbC';

if (password_verify('testing', $hashNotWorking)) {
 echo 'Password is valid!';
} else {
 echo 'Invalid password.';
}
?>

下面是一个正在工作的代码示例($2a,$ encryption,不是由password_hash函数生成的)。

代码语言:javascript
复制
<?php
// $hashWorking came from https://www.bcrypt-generator.com/
$hashWorking = '$2a$08$uP75n/pDhUZo6qOOM3DuPug5U2fcSXW4f3MUz8p3SlO5yPZ4fLf9O';

if (password_verify('testing', $hashWorking)) {
 echo 'Password is valid!';
} else {
 echo 'Invalid password.';
}
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-13 06:20:34

我怀疑在原始散列和/或<br>中引入了空格,或者用户引入了一些空格。

我以前经常看到这种情况。

如果是这样的话,那就trim()吧。

根据我在注释中提到的内容创建一个新的散列,它将工作。

代码语言:javascript
复制
echo $var = password_hash("testing", PASSWORD_DEFAULT)."\n";

然后将其粘贴到当前散列的位置。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40570929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档