2016-02-05 62 views
5

我有兩個應用程序,一個在Laravel 5.2中,一個在Meteor中。我想收集與這兩個平臺兼容的密碼。Laravel&Meteor密碼哈希

數據庫分別

  • password存儲散列爲Laravel。
  • meteor_password流星。

這兩個平臺默認都使用bcrypt,默認10輪,但流星似乎在bcrypt之前使用純密碼。

如果流星創建密碼哈希abc,我可以SHA256平原密碼,並使用Laravel的內部它abc比較,即Auth::attempt()

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

這工作。 Laravel成功驗證用戶身份。但是,如果我在Laravel中註冊一個新用戶,並存儲散列meteor_password,那麼在對Meteor中的該散列進行身份驗證時,它將失敗並顯示錯誤消息「禁止登錄」。 This error appears to be mean incorrect credentials.

我創建哈希的方式與我在Laravel中驗證哈希時的方式相同。

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

這似乎很奇怪,它會工作的一種方式,而不是其他所以我認爲我失去了一些東西。

回答

3

在2011年,一個bug是PHP的BCrypt執行發現的,所以他們changed原來2a版本指示器2x2y,這是今天使用,以表明該密碼是由固定的版本散列。

因此,PHP的2y生成的散列應該與節點的2a生成的散列相同。

爲了正確處理NPM模塊(由Meteor使用),應該更改前綴,因爲它的編號爲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

現貨,按預期工作。感謝您的鏈接;有趣的讀物。 –

+0

太好了。順便說一句,「成本」因素是指數,所以10的成本實際上是(2^10 =)1024輪,而不是10 – MasterAM