Проблемы с проверкой хешированного пароля md5 со случайно сгенерированной солью?

Я понимаю, что это не так безопасно, как могло бы быть, но я хочу сделать это таким образом.

У меня есть этот код, который генерирует пароль из записи пользователя ($ пароль) …

$salt = mcrypt_create_iv(22, MCRYPT_DEV_URANDOM);
$new_password = md5($salt . $password);
$new_password = $salt . $new_password;

Вот как я пытаюсь проверить сохраненный пароль:

$split_salt = substr($saved_password, 0, 22);
$incomplete_password = md5($split_salt . $current_password);
$hashed_password = $split_salt . $incomplete_password;

if ($saved_password != $hashed_password) {

$error = "error";

} else {

//Validated

}

Насколько я могу сказать, это должно работать. Тем не менее, я получаю ошибку вместо проверки. Это как-то связано с тем, что MCRYPT не производит ровно 22 символа?

0

Решение

Я знаю, что это не то, что вы хотите услышать, но ваша схема настолько небезопасна, а хорошее решение настолько просто реализовать, что вам следует пересмотреть:

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($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($password, $existingHashFromDb);

Ваша настоящая проблема в соли, mcrypt_create_iv() вернет двоичную строку, и она может очень хорошо содержать символы \ 0. Так что это чистая удача, если ваш подход работает или нет.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]