【问题标题】:Hash:make returns different result everytime? [duplicate]Hash:make 每次都返回不同的结果? [复制]
【发布时间】:2021-06-29 05:41:09
【问题描述】:
>>> 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,
    ],

【问题讨论】:

标签: php laravel-8


【解决方案1】:

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

Hash::check()

这里是关于该主题的更详细的讨论

Laravel 4.1 Hash::make inconsistency

【讨论】:

    【解决方案2】:

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

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

    要验证明文输入(例如登录表单中的输入密码) 是否对照先前生成的哈希(例如您在注册期间存储的内容),请使用Hash::check()

    【讨论】:

      【解决方案3】:

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

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

      如果您想更深入地了解它的工作原理,维基百科有一篇很棒的文章: https://en.wikipedia.org/wiki/Bcrypt

      【讨论】:

        猜你喜欢
        • 2020-01-28
        • 2012-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-27
        • 1970-01-01
        • 2020-08-10
        相关资源
        最近更新 更多