Laravel 5:在相同的字符串上使用bcrypt会给出不同的值

10 bcrypt laravel laravel-5

我正在使用Laravel的bcrypt函数来散列密码.当我做,

bcrypt('secret')
Run Code Online (Sandbox Code Playgroud)

我明白了

=> "$2y$10$mnPgYt2xm9pxb/c2I.SH.uuhgrOj4WajDQTJYssUbTjmPOcgQybcu"
Run Code Online (Sandbox Code Playgroud)

但是,如果我再次运行它,我会得到

=> "$2y$10$J8h.Xmf6muivJ4bDweUlcu/BaNzI2wlBiAcop30PbPoKa0kDaf9xi"
Run Code Online (Sandbox Code Playgroud)

等等...

那么,如果每次都得到不同的值,密码匹配过程是否会失败?

lin*_*san 25

这是bcrypt应该如何工作.见维基百科.

Bcrypt 在散列期间生成随机的128位盐.这个成为哈希的一部分,因此我们总是为相同的输入字符串获得不同的哈希值.随机盐实际上用于阻止暴力攻击.

由于哈希值不同,密码匹配过程不会失败.请尝试以下内容tinker

$hash1 = bcrypt('secret')
$hash2 = bcrypt('secret')

Hash::check('secret', $hash1)
Hash::check('secret', $hash2)
Run Code Online (Sandbox Code Playgroud)

你应该进入true两种情况Hash::check.

因此,即使哈希值不同,密码匹配也不会失败.