Hash:make 每次返回不同的结果?

时间:2021-04-02 10:16:37

标签: php laravel-8

>>> Hash::make('password')
=> "$2y$10$Vp7RA3EoThTrlu5JecW1kOkTZQOjVDCtbM.9LysfrZhVz.Jf.53Y."
>>> Hash::make('password')
=> "$2y$10$OlX/8PgvSNN6drM4jVa6XeKQ/q5FKCi8zhMi/Dt7vrz6JPHU/EK4C"
>>> Hash::make('password')
=> "$2y$10$svoJrNRmlEX2XWGU4G4MzekDOvJLJW9uSC2SY98bXad2cSqge.MGK"

谁能帮我理解为什么 Hash::make 在每次执行时都给出不同的哈希值?

是否涉及基于时间或随机的组件。

我的 config/hashing.php 有默认值。

    'driver' => 'bcrypt',
    'bcrypt' => [
        'rounds' => env('BCRYPT_ROUNDS', 10),
    ],

    'argon' => [
        'memory' => 1024,
        'threads' => 2,
        'time' => 2,
    ],

3 个答案:

答案 0 :(得分:2)

您的 Hash::make() 函数正在使用 bcrypt 散列算法,正如配置所定义的那样。

Bcrypt 通过设计为相同的输入生成不同的输出。 这不是错误,而是功能。 :-)

要根据先前生成的哈希(例如您在注册期间存储的内容)验证纯文本输入(例如从登录表单输入密码),请使用 {{3} }.

答案 1 :(得分:2)

Hash:make 将所谓的“盐”添加到哈希中,用于在每次调用时获得不同的结果以提高安全性。

在您使用 bcrypt 的情况下,您可以通过加密字符串开头的 $2y$ 识别它,然后是复杂性 (10) 和盐。

如果你想更深入地了解它是如何工作的,维基百科有一篇很棒的文章: This image is a screenshot of the error along with my page that it is saying the error is on and my dependencies

答案 2 :(得分:1)

你是对的,这就是设计。 您将需要使用以下内容来验证您的哈希:

Hash::check()

这是关于该主题的更多详细信息的讨论

Laravel 4.1 Hash::make inconsistency