Сравнение пароля после преобразования в десятичную - PullRequest
0 голосов
/ 26 апреля 2020

Недавно я работал над приложением PHP и сравнивал сохраненный в БД пароль (который был сгенерирован и сохранен в приложении C# с использованием sha512) в моем приложении PHP.

Как я вижу, я не мог сравнить пароль, используя base64 или даже с шестнадцатеричными значениями. Но затем я преобразовал их в десятичную и смог сравнить и оба пароля (входной и сохраненный).

Вот пример кода, который я использовал (оба содержат двоичный файл sha512 га sh):

$storedpass = $DBModel->password;
if (hexdec($passwordHash) === hexdec($storedpass)) {
 return true;
}

Код вернул true таким образом;

Мой вопрос: их значения base64 не совпадают, их шестнадцатеричные не совпадают, но их десятичные значения одинаковы. Это правильный способ сравнения паролей? У меня тут какая-то уязвимость?

1 Ответ

0 голосов
/ 28 апреля 2020

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

Вот почему существуют пароли, имеющие sh функций, в PHP вы бы сделали это следующим образом:

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($_POST['password'], $existingHashFromDb);
...