2016-02-05 15 views
5

Ho due applicazioni, una in Laravel 5.2 e una in Meteor. Voglio raccogliere hash per password compatibili con entrambe le piattaforme.Hatch password Laravel & Meteor

Il database memorizza gli hash separatamente

  • password per laravel.
  • meteor_password per Meteor.

Entrambe le piattaforme utilizzano bcrypt con 10 round di default, ma Meteor sembra sha256 la password semplice prima di bcrypt.

Se Meteor crea una password hash abc, posso SHA256 la password pianura, e confrontarlo con abc con interni di laravel, vale a dire Auth::attempt()

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

Questo funziona. Laravel autentica con successo l'utente.

Tuttavia, se registro un nuovo utente in Laravel e memorizzo l'hash meteor_password, durante l'autenticazione con tale hash in Meteor, non riesce con il messaggio di errore "Accesso vietato". This error appears to be mean incorrect credentials.

Sto creando l'hash nello stesso modo in cui l'ho verificato quando l'ho verificato in Laravel.

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

Sembra strano che funzioni in un modo e non nell'altro quindi presumo che mi manchi qualcosa.

risposta

3

Nel 2011, un bug è stato scoperto nella realizzazione bcrypt di PHP, in modo da changed l'originale indicatore di 2a versione da 2x e 2y, che viene utilizzato oggi, per indicare che la password è stata hash dalla versione fissa.

Pertanto, l'hash generato da PHP 2y deve essere identico a quello generato dal nodo 2a.

Il prefisso deve essere modificato per essere elaborato correttamente dal modulo NPM (utilizzato da Meteor), come 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 on, funziona come previsto. Grazie per i link; letture interessanti –

+0

Grande. A proposito, il fattore "costo" è esponenziale, quindi un costo di 10 è, infatti, (2^10 =) 1024 round, non 10 :) – MasterAM