2011-12-30 69 views
1

鑑於我知道哈希密碼,鹽&用Authlogic(ruby on rails gem)生成原始密碼。在PHP函數中重現Authlogic哈希

是否有可能在PHP中設計一個函數來檢查用戶密碼是否與DB中的用戶Ruby Authlogic hashed_pw匹配?我需要將現有的PHP應用程序與Ruby應用程序集成,而不必重置所有的Ruby用戶密碼。

我想是這樣,但低於它似乎沒有工作

function passwordhash($password, $salt) 
{ 
return hash('sha512', "{$password}:{$salt}"); 
} 
echo passwordhash("orange","NsxUt51YVzK4dFeVJOj"); 
output: 7b4a69291354dc3591e490f47f29d5a4a4b6d7faa23d01a1ee595b917526b65e2dda48e978c46b81dde0269adc3f853a36c075d236eb89c8f6b21811fe3da1bb 

的DB信息是

crypted_password 
f777c545bf9844faaa5f3b129e77e4199539793d907e397ddc97d1bb747a30d402201bd11ed9ca0eaecbf3b9652b314aa919d65904c64d4169ce0e1ac1c526a4 

password_salt 
NsxUt51YVzK4dFeVJOj 

real password 
orange 

看起來這應該是可能的我缺少什麼?

感謝, 瑞安

+0

我試圖做同樣在Java中,併爲您的PHP工作? – WarFox 2014-04-05 07:49:47

回答

2

我的authlogic代碼的細讀表明兩兩件事:

  • 它不使用:將密碼從鹽中分離(即消化第一個字符串orangeNsxUt51YVzK4dFeVJOj
  • 它一個SHA512在第一過程的輸出消化和重複這個過程20次

另一件事是,authlogic支持大量的哈希策略 - 確保你試圖重新實現正確的策略!它看起來像20倍sha512是正確的。

鏈接:https://github.com/binarylogic/authlogic/blob/master/lib/authlogic/crypto_providers/sha512.rb

0

我設法重現紅寶石寶石authlogic SHA512實現這樣的:

/** 
    * implements ruby gem authlogic sha512 encryption 
    * @param $password 
    * @param $salt 
    * @return string 
    */ 
    private function sha512hash($password, $salt) { 
    $strechtes = 20; 
    $digest = $password . $salt; 
    for ($i = 0; $i < $strechtes; $i++) { 
     $digest = hash('sha512', $digest); 
    } 
    return $digest; 
    }