2012-02-27 75 views
0

是什麼在這個軌道上的當量(PHP):Ruby on Rails的傳遞鹽消化:: SHA512

hash_hmac('sha512', $password . $salt, $siteSalt); 

我得到儘可能的:

Digest::SHA512.hexdigest(password + salt) 

,但沒有想法如何將網站鹽納入到公式中,我所見過的所有在線示例都不會將鹽傳遞給十六進制方法。當我嘗試過它時,我得到了太多參數的錯誤。

而這個符號以一個冒號(我所看見的地方):

salted = password + salt 
Digest::SHA512.hexdigest("#{salted}:site_salt") 

不會產生相同的散列。

感謝

編輯 我偶然發現了這一點,看起來更接近我需要什麼(很抱歉,我很新的全散列東西):

OpenSSL::HMAC.hexdigest('sha512', site_salt, salted) 

但它仍然產生與存儲在數據庫中的哈希不同。

回答

0

我認爲這會做你想要什麼:

HMAC::SHA512.hexdigest(site_salt, password + salt) 

它看起來像你正在使用siteSalt作爲HMAC功能鍵引用的PHP代碼,用密碼和鹽級聯指定爲要散列的值。

我檢查這個由PHP運行此代碼:

% php -r 'print hash_hmac("sha512", "password" . "salt", "siteSalt") . "\n";' 
15b45385a00b10eb25c3aa8198d747862575a796a89a6c79b5a0b8ea332a8d75b1ec0dc1f0c9f7930d30c9359279e86df29067bbbc5d9bcf87839f855ac7a677 

然後在Rails的外殼:

>> HMAC::SHA512.hexdigest('siteSalt', 'password' + 'salt') 
=> "15b45385a00b10eb25c3aa8198d747862575a796a89a6c79b5a0b8ea332a8d75b1ec0dc1f0c9f7930d30c9359279e86df29067bbbc5d9bcf87839f855ac7a677" 
+0

是的,這差不多就是我在最後的方法。原來在PHP代碼中鹽是空的,因此存在差異。非常感謝您的回答。 – kakubei 2012-02-28 09:14:08

+0

Rails代碼沒有爲我編譯(3年後使用Rails 4並不奇怪)。所以任何人發現這一點,請參閱下面的答案。 – tomf 2015-04-07 14:46:57

0

原來,鹽是在PHP代碼空,因此差異。但是現在兩種方法都返回相同的結果

1

我用Rails 4和@ Brian的Rails代碼並沒有編譯我。

這是什麼爲我工作。

Rails的外殼:

2.1.2 :001 > Digest::HMAC.hexdigest("password"+"salt","siteSalt",Digest::SHA512) 
=> "15b45385a00b10eb25c3aa8198d747862575a796a89a6c79b5a0b8ea332a8d75b1ec0dc1f0c9f7930d30c9359279e86df29067bbbc5d9bcf87839f855ac7a677" 

PHP(命令行)

$ php -r 'print hash_hmac("sha512", "password" . "salt", "siteSalt") . "\n";' 
15b45385a00b10eb25c3aa8198d747862575a796a89a6c79b5a0b8ea332a8d75b1ec0dc1f0c9f7930d30c9359279e86df29067bbbc5d9bcf87839f855ac7a677