2016-03-01 24 views
5

Jak porównać dwa bcrypt hasłoJak porównać dwa szyfrowane (bcrypt) hasło laravel

$pass1 = '$2y$10$ooPG9s1lcwUGYv1nqeyNcO0ccYJf8hlhm5dJXy7xoamvgiczXHB7S'; 

I

$pass2 = '$2y$10$QRgaiS6bpATKKQeT22zGKuHq.edDfXQc2.4B3v.zaN.GtGwoyQuMy'; 

Zarówno $ pass1 & $ pass2 są bcrypt dla 'testu'.

Jak mogę sprawdzić pod kątem równości. bez użycia tekstu „test” jak to

$hash1 = Hash::make('test'); 
$hash2 = Hash::make('test'); 

var_dump(Hash::check('test', $hash1) && Hash::check('test', $hash2)); 
+0

Spójrz na to, brachu. [Wyjaśnienie Laravel Hash] (https://mnshankar.wordpress.com/2014/03/29/laravel-hash-make-explained/). –

Odpowiedz

3

Nie można właściwie porównać dwa zaszyfrowane bcrypt haseł do siebie bezpośrednio jako ciągi ponieważ szyfrowanie zawiera sól, która sprawia, że ​​hashe za każdym razem inny.

+0

"Test" to tylko na przykład, faktycznie wszystkie hasła są przechowywane w db i nie mogę odszyfrować ponownie, aby porównać, żadnej innej alternatywy do sprawdzenia. – Jija

+1

To właśnie mam na myśli. Nie można bezpośrednio porównywać zaszyfrowanych haseł. Możesz uruchomić Hash :: check() na każdym z nich, jeśli wiesz, jakie jest oryginalne hasło, ale nie da się porównać dwóch haseł bcryptowanych. Zaktualizowałem swoją odpowiedź, aby uprościć sytuację. – Joseph

10
if(Hash::check('plain-text-password',$cryptedpassword)) { 
    // Right password 
} else { 
    // Wrong one 
}