Ruby on Rails передает соль в дайджест :: SHA512 - PullRequest
0 голосов
/ 27 февраля 2012

что эквивалентно в Rails этого (PHP):

 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 ]

1 голос
/ 07 апреля 2015

Я использую Rails 4, и код rails @ brian для меня не компилируется.

Вот что у меня сработало.

Рельсовая оболочка:

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
0 голосов
/ 28 февраля 2012

Оказывается, соль была пустой в коде PHP, отсюда и расхождение.Но теперь оба метода возвращают одно и то же.

0 голосов
/ 28 февраля 2012

Я думаю, что это будет делать то, что вы хотите:

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"
...