Ruby on Rails将盐传递给Digest :: SHA512

时间:2012-02-27 10:45:24

标签: ruby-on-rails-3.1 digest-authentication sha512

这个(PHP)的Rails中的等价物是什么:

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

我得到了这个:

Digest::SHA512.hexdigest(password + salt)

但是不知道如何将网站盐纳入等式,我见过的所有在线示例都没有将盐传递给hexdigest方法。当我尝试它时,我得到了太多参数的错误。

这个带冒号的符号(我在某处看到):

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

不会产生相同的哈希。

由于

修改 我偶然发现这看起来更接近我需要的东西(对不起,我对整个哈希的事情都很陌生):

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

但它仍会产生与存储在数据库中的哈希不同的哈希值。

3 个答案:

答案 0 :(得分:1)

我正在使用Rails 4并且@ brian的rails代码没有为我编译。

这对我有用。

Rails shell:

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

答案 1 :(得分:0)

我认为这会做你想做的事情:

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

看起来您正在引用的PHP代码使用siteSalt作为HMAC功能的密钥,并将密码和salt连接指定为要散列的值。

我通过在PHP中运行此代码来检查这一点:

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

然后在Rails shell中:

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

答案 2 :(得分:0)

事实证明,PHP代码中的salt是空的,因此存在差异。但现在两种方法都返回相同的。