Drupal 7 хэш пароля - PullRequest
       51

Drupal 7 хэш пароля

2 голосов
/ 26 марта 2012

У меня тут небольшая дилемма. У меня есть таблица пользователей базы данных drupal 7 с соответствующими паролями. Все эти пароли были естественно зашифрованы. Я предполагаю, что это хеши MD5, но не совсем.

Проблема здесь в том, что мы используем тот же набор пользователей на сопутствующем веб-сайте, который использует аналогичные учетные данные, но другую технологию [пожалуйста, не вините меня в этом, я просто пешка].

Теперь, если бы я знал, как Drupal использует шифрование своих паролей, возможно, я мог бы расшифровать их и применить то же самое в своей логике бэкэнда?

Ответы [ 2 ]

6 голосов
/ 26 марта 2012

Обратите внимание, что эти пароли хешированы , не зашифрованы.Принципиальная разница между хешированием и шифрованием заключается в том, что с помощью шифрования вы сможете восстановить исходный пароль.Вы не сможете сделать это, когда они будут хэшированы (не без особых усилий), и это специально.

Подумайте о оладьи: если вы сделали хэш-коричневый, вы не сможете вернуть оригинальный картофель.Это сделано для того, чтобы, если хакер скомпрометировал вашу систему и получил доступ к базе данных, он не смог увидеть или восстановить исходные пароли.

Так как же проверить, правильно ли пользователь ввел правильный пароль??Что ж, когда пользователь пытается войти в систему и ввести пароль, вы применяете те же функции к пользовательскому вводу и смотрите, совпадает ли вывод с тем, что хранится в базе данных.Поскольку функции хеширования детерминированы , вы всегда получите один и тот же вывод с одним и тем же вводом.

Ключом к тому, чтобы несколько приложений работали с одинаковыми хешами, было использование одинаковыми функциями.на пароли при попытке аутентификации пользователя.Drupal, вероятно, также использует одну или несколько солей - но это не важно.Пока ваши приложения используют одну и ту же логику, хэши будут всегда полностью совместимы.

Предположим, что Drupal использует нечто подобное в качестве своей системы аутентификации (очень упрощенный псевдо-код):

/*
    input: user-entered $username and $password
    output: true if authorized, false otherwise
*/
function auth($username, $password) 
{
    $salt = 'some random salt';

    // input is sanitized somewhere, somehow
    $hash_from_db = db_result('SELECT hash FROM users WHERE username = "$username"');
    $hashed_input = sha1($password . $salt);

    if ($hash_from_db != $hashed_input)
        return false;
    else
        return true; 
}

Если ваше другое приложение использует ту же самую вещь для аутентификации своих пользователей, оно будет работать нормально.Обратите внимание, что схема аутентификации Drupal, вероятно, будет намного более сложной, но не позволяйте этому волновать вас.Это примерно то же самое, что делает Drupal.


Для Drupal, вот где вы можете начать: user_hash_password().

0 голосов
/ 14 января 2014

Вы можете использовать метод drupal, чтобы проверить, является ли пароль в виде простого текста действительным или нет для этого user_check_password ($ password, $ account) в include / password.inc.

...