我的目标是制作新的Laravel应用程序,该应用程序将使用Yii创建的旧数据库。
数据库哈希为$2a$07$6c2eb62b00df224f3d20$.qzdiDRZejMnGytXWsA7Jid7RpWazDc6
。
当我在PHP 7.4中的test.php中运行password_verify('...','$2a$07$6c2eb62b00df224f3d20$.qzdiDRZejMnGytXWsA7Jid7RpWazDc6)
时(通过php test.php
),它返回true。
当我在PHP 8.2中运行Laravel内部的相同代码时(例如在php artisan tinker
或web路由中),它返回false。
可能是什么原因,以及如何验证以前由PHP的旧版本(但它们在7.4中工作)生成的哈希值,而在最新的PHP版本中使用laravel?
在这两种情况下,算法都是未知的:
Array
(
[algo] =>
[algoName] => unknown
[options] => Array
(
)
)
2条答案
按热度按时间yzuktlbb1#
下面是哈希和验证的示例
这应该给你的想法,我猜,最有可能的是,你需要修复你的散列算法,它应该工作正常。
在config/hashing.php中你可以设置算法,目前只支持Bcrypt和Argon2(Argon2i和Argon2id变体)。
参考:www.example.comhttps://laravel.com/docs/10.x/hashing#configuration
8cdiaqws2#
在单独的PHP脚本中运行password_verify和在Laravel中运行它会得到不同的结果,这可能是由于PHP配置或环境的不同,例如Laravel可能使用了不同版本的bcrypt算法,与Yii创建的哈希不兼容,或者PHP配置设置有差异,如默认哈希算法或密钥长度。
您可以尝试在Yii中生成哈希值时显式指定算法和选项,然后在Laravel中使用相同的算法和选项来验证哈希值。例如,您可以使用以下代码在Yii中生成哈希值:
然后在Laravel中,您可以在验证哈希时使用相同的选项:
另一个选择是在Yii和Laravel中显式指定生成哈希值的算法,例如,你可以在Yii中使用下面的代码来生成哈希值:
然后在Laravel中,您可以使用相同的算法来验证哈希:
通过显式指定生成哈希的算法和选项,您可以确保在Yii和Laravel中验证哈希时使用相同的算法和选项。