Jaki jest odpowiednik tego w Railsach (PHP):

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

Dostałem tak daleko, jak to:

Digest::SHA512.hexdigest(password + salt)

Ale nie mam pojęcia, jak włączyć sól z witryny do równania, wszystkie przykłady online, które widziałem, nie przekazują soli do metody heksagestii. Kiedy to spróbowałem, otrzymuję błąd dla zbyt wielu argumentów.

I ten zapis z dwukropkiem (który gdzieś widziałem):

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

Nie daje tego samego haszu.

Dzięki

Edytuj Natknąłem się na to, że wygląda bardziej na to, czego potrzebuję (przepraszam, jestem bardzo nowy w całej sprawie haszowania):

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

Ale nadal generuje inny skrót niż ten przechowywany w bazie danych.

0
kakubei 27 luty 2012, 14:45

3 odpowiedzi

Najlepsza odpowiedź

Myślę, że zrobi to, co chcesz:

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

Wygląda na to, że kod PHP, do którego się odwołujesz, używa siteSalt jako klucza dla funkcji HMAC, a połączone hasło i sól są określone jako wartość do zahaszowania.

Sprawdziłem to uruchamiając ten kod w PHP:

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

A potem w powłoce Rails:

>> HMAC::SHA512.hexdigest('siteSalt', 'password' + 'salt')
=> "15b45385a00b10eb25c3aa8198d747862575a796a89a6c79b5a0b8ea332a8d75b1ec0dc1f0c9f7930d30c9359279e86df29067bbbc5d9bcf87839f855ac7a677"
0
Brian 28 luty 2012, 09:19

Używam Rails 4 i kod rails @briana nie skompilował się dla mnie.

Oto, co dla mnie zadziałało.

Powłoka szyn:

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

PHP (z wiersza poleceń)

 $ php -r 'print hash_hmac("sha512", "password" . "salt", "siteSalt") . "\n";'
15b45385a00b10eb25c3aa8198d747862575a796a89a6c79b5a0b8ea332a8d75b1ec0dc1f0c9f7930d30c9359279e86df29067bbbc5d9bcf87839f855ac7a677
2
tomf 7 kwiecień 2015, 17:45

Okazuje się, że sól była pusta w kodzie PHP, stąd rozbieżność. Ale teraz obie metody zwracają to samo.

0
kakubei 28 luty 2012, 13:14