2016-02-05 21 views
5

Mam dwie aplikacje, jedną w Laravel 5.2 i jedną w Meteor. Chcę zebrać skróty dla haseł, które są zgodne z obu platform.Hasło hashujące Laravel i Meteor

Baza danych przechowuje mieszań oddzielnie

  • password dla laravel.
  • meteor_password dla Meteor.

Domyślnie obie platformy używają bcrypt z 10 rundami, ale Meteor wydaje się sha256 zwykłym hasłem przed bcrypt.

Jeśli Meteor tworzy hash hasła abc mogę sha256 zwykły hasło, a następnie porównać je z abc stosując wewnętrzne laravel za, tj Auth::attempt()

$sha256 = hash('sha256', $request->get('password'), false); 

To działa. Laravel pomyślnie uwierzytelnia użytkownika.

Jeśli jednak zarejestruję nowego użytkownika w Laravel i przechowywam haszowanie meteor_password, podczas uwierzytelniania przeciwko temu hashowi w Meteorzie, nie powiedzie się to z komunikatem o błędzie "Zalogowanie zabronione". This error appears to be mean incorrect credentials.

Tworzenie skrótu w taki sam sposób, jak to zrobiłem, gdy zweryfikowałem go w Laravel.

$meteor_password = bcrypt(hash('sha256', $plain, false)); 

Wydaje się dziwne, że zadziała w jedną stronę, a nie w drugą, więc zakładam, że czegoś brakuje.

Odpowiedz

3

W 2011 bug została odkryta w realizacji BCrypt PHP, więc changed oryginalny 2a wersji wskaźnika do 2x i 2y, który jest używany dzisiaj, aby wskazać, że hasło zostało zakodowane przez stałą wersji.

Dlatego skrót wygenerowany przez PHP 2y powinien być identyczny z wygenerowanym przez węzeł: 2a.

Przedrostek powinien zostać zmieniony w celu poprawnego przetworzenia przez moduł NPM (używany przez Meteor), ponieważ jest to does not acknowledge 2y.

$meteor_password = bcrypt(hash('sha256', $plain, false)); 
// replace it useing something like: 
$meteor_password = str_replace('$2y', '$2a', $meteor_password); 
// or 
$meteor_password[2] = 'a'; 
+0

Spot na miejscu działa zgodnie z oczekiwaniami. Dzięki za linki; interesujące czyta. –

+0

Świetnie. BTW, czynnik "kosztowy" jest wykładniczy, więc koszt 10 jest w rzeczywistości (2^10 =) 1024 rundy, a nie 10 :) – MasterAM