2016-08-29 1 views
6

Я использую функцию Laravel bcrypt для хэширования паролей. Когда я,Laravel 5: использование bcrypt на одной строке дает разные значения

bcrypt('secret') 

Я получаю

=> "$2y$10$mnPgYt2xm9pxb/c2I.SH.uuhgrOj4WajDQTJYssUbTjmPOcgQybcu" 

Но если я запускаю его снова, я получаю

=> "$2y$10$J8h.Xmf6muivJ4bDweUlcu/BaNzI2wlBiAcop30PbPoKa0kDaf9xi" 

и так далее ...

Так, выиграл» t процесс совпадения паролей терпит неудачу, если я получаю разные значения каждый раз?

ответ

14

Это как должно работать bcrypt. См. wikipidea.

Bcrypt генерирует случайную 128-битную соль во время хэширования. Эта соль становится частью хэша, поэтому мы всегда получаем другое значение хэша для той же входной строки. Случайная соль фактически используется для определения нападений грубой силы.

Процесс совпадения паролей не завершится из-за различных значений хэшей. Попробуйте следующее tinker

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

Hash::check('secret', $hash1) 
Hash::check('secret', $hash2) 

Вы должны получить true в обоих случаях Hash::check.

Таким образом, даже если значения хэша различны, совпадение паролей не прекратится.

+0

Также посмотрите на http://stackoverflow.com/questions/29518652/laravel-5-encryption-different-values-for-same-string-given – linuxartisan

+0

то же, что и я, но оба являются ** ложными ** в 'laravel5.3' –

+0

У меня это должно быть как' Hash :: check ('secret', $ hash1) 'смотрите http://stackoverflow.com/questions/21495502/laravel-hashcheck-allways-return-false –

Смежные вопросы