2016-08-29 32 views
6

Używam funkcji Laravel's bcrypt do mieszania haseł. Kiedy robię,Laravel 5: używanie bcrypt na tym samym łańcuchu daje różne wartości

bcrypt('secret') 

uzyskać

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

Ale jeśli uruchomić go ponownie, mam

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

i tak dalej ...

Więc won” t proces dopasowywania haseł nie działa, jeśli za każdym razem otrzymuję różne wartości?

Odpowiedz

14

Tak ma działać bcrypt. Zobacz wikipidea.

Bcrypt generuje losową 128-bitową sól podczas mieszania. Ta sól staje się częścią skrótu, dlatego zawsze otrzymujemy inną wartość skrótu dla tego samego ciągu wejściowego. Losowa sól jest faktycznie używana do powstrzymywania ataków typu brute-force.

Proces dopasowywania haseł nie zakończy się niepowodzeniem z powodu różnych wartości skrótów. Spróbuj wykonać następujące czynności w tinker

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

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

Powinieneś dostać true w obu przypadkach Hash::check.

Więc nawet jeśli wartości mieszania są różne, dopasowanie hasła nie zakończy się niepowodzeniem.

+0

Zobacz również http://stackoverflow.com/questions/29518652/laravel-5-encryption-different-values-for-same-string-given – linuxartisan

+0

same działają, ale oba mają wartość ** false ** in 'laravel5.3' –

+0

Mam to powinno być jak' Hash :: check ('secret', $ hash1) 'spójrz na http://stackoverflow.com/questions/21495502/laravel-hashcheck-allways-return-false –