2016-02-05 14 views
5

私は2つのアプリケーション、Laravel 5.2に1つ、流星の1を持っています。私は両方のプラットフォームと互換性のあるパスワードのハッシュを収集したい。Laravel&メテオパスワード

データベースはLaravelのために別々に

  • passwordハッシュを格納します。流星のため
  • meteor_password

両方のプラットフォームでは、デフォルトで10ラウンドのbcryptが使用されますが、Meteorではbcryptの前に平文のパスワードがsha256と表示されます。

流星は、パスワードハッシュabcを作成した場合、私はプレーンパスワードをSHA256、およびLaravelの内部を使用してabcとそれを比較することができ、即ちAuth::attempt()

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

これは動作します。 Laravelはユーザーを正常に認証します。

しかし、私がLaravelに新しいユーザーを登録し、meteor_passwordというハッシュを保存すると、Meteorでそのハッシュに対して認証すると、エラーメッセージ "Login Forbidden"で失敗します。 This error appears to be mean incorrect credentials.

私はLaravelでそれを確認したとき、私は私がやったのと同じ方法でハッシュを作成しています。

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

私は何かが欠けていると思うので、それは一方的に働くのが奇妙に思えます。 2011年

答えて

3

、バグはPHPのbcryptの実装で発見されたので、彼らはパスワードが固定されたバージョンでハッシュされたことを示すために、今日使用され2x2yにオリジナル2aバージョンインジケータを、changedました。

したがって、PHPの2yによって生成されたハッシュは、ノードの2aによって生成されたハッシュと同一である必要があります。

プレフィックスが正しくdoes not acknowledge 2yとして、(流星によって使用される)NPMモジュールによって処理されるために変更されなければなりません。

$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

期待通りに動作しますが、上のスポット。リンクありがとうございました。面白い読み物。 –

+0

素晴らしい。実際には、10のコストは、実際には(2^10 =)1024ラウンドであり、10ではありません。 – MasterAM