Воспроизвести Authlogic Hash в функции PHP - PullRequest
1 голос
/ 30 декабря 2011

Учитывая, что я знаю хешированный пароль, соль и оригинальный пароль, сгенерированный с помощью Authlogic (рубин на rails gem).

Возможно ли в PHP разработать функцию проверки соответствия пароля пользователя Ruby Authlogic hashed_pw в БД?Мне нужно интегрировать существующее PHP-приложение с ruby-приложением, не сбрасывая все пароли пользователей Ruby.

Я пробовал что-то похожее на приведенное ниже, но, похоже, оно не работает

function passwordhash($password, $salt)
{
 return hash('sha512', "{$password}:{$salt}");
}
echo passwordhash("orange","NsxUt51YVzK4dFeVJOj");
output: 7b4a69291354dc3591e490f47f29d5a4a4b6d7faa23d01a1ee595b917526b65e2dda48e978c46b81dde0269adc3f853a36c075d236eb89c8f6b21811fe3da1bb

БДинформация

crypted_password 
f777c545bf9844faaa5f3b129e77e4199539793d907e397ddc97d1bb747a30d402201bd11ed9ca0eaecbf3b9652b314aa919d65904c64d4169ce0e1ac1c526a4

password_salt
NsxUt51YVzK4dFeVJOj

real password
orange

Похоже, это возможно, что я пропускаю?

Спасибо, Райан

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Мое прочтение кода авторизации предполагает 2 вещи:

  • Он не использует: для отделения пароля от соли (т. Е. Первая строка, которая должна быть переварена, - orangeNsxUt51YVzK4dFeVJOj
  • Выполняет дайджест sha512 на выходе первого процесса и повторяет этот процесс 20 раз

Другое дело, что authlogic поддерживает большое количество стратегий хеширования - убедитесь, что выПопытка переопределить правильный! Это, конечно, выглядит как 20-кратный sha512 - правильный.

Ссылка: https://github.com/binarylogic/authlogic/blob/master/lib/authlogic/crypto_providers/sha512.rb

0 голосов
/ 05 июня 2014

Мне удалось воспроизвести реализацию ruby ​​gem authlogic sha512 следующим образом:

  /**
   * implements ruby gem authlogic sha512 encryption
   * @param $password
   * @param $salt
   * @return string
   */
  private function sha512hash($password, $salt) {
    $strechtes = 20;
    $digest = $password . $salt;
    for ($i = 0; $i < $strechtes; $i++) {
      $digest = hash('sha512', $digest);
    }
    return $digest;
  }
...