哈希算法:make 函数每次返回的结果都不同?

5
>>> 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,
    ],


2
这个回答解决了你的问题吗?Hash::make('password')每次调用返回不同的结果 - Ali Abbasov
3个回答

4

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

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

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


3
您的 Hash::make() 函数使用了 bcrypt 哈希算法,正如配置文件所定义的那样。
Bcrypt 通过设计会为相同的输入生成不同的输出。这不是一个 bug,而是一种特性。 :-)
要验证明文输入(例如来自登录表单的输入密码)与先前生成的哈希值(例如您在注册时存储的内容)是否匹配,请使用 Hash::check()

2
您说得对,这就是设计的初衷。您需要使用以下内容来验证您的哈希值:
Hash::check()

这里有一篇关于该主题的讨论,其中有更多细节:

Laravel 4.1中Hash::make的不一致性


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接