0

这个(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)

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

4

3 回答 3

2

我正在使用 Rails 4,@brian 的 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
于 2015-04-07T14:45:02.227 回答
0

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

于 2012-02-28T09:14:47.437 回答
0

我认为这会做你想要的:

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

看起来您引用的 PHP 代码使用 siteSalt 作为 HMAC 函数的键,并将密码和盐连接指定为要散列的值。

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

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

然后在 Rails 外壳中:

>> HMAC::SHA512.hexdigest('siteSalt', 'password' + 'salt')
=> "15b45385a00b10eb25c3aa8198d747862575a796a89a6c79b5a0b8ea332a8d75b1ec0dc1f0c9f7930d30c9359279e86df29067bbbc5d9bcf87839f855ac7a677"
于 2012-02-28T05:19:47.667 回答