Я столкнулся с некоторыми проблемами с моей системой входа в систему. Если я установил свой пароль пользователя на «TestPassword1234», «TestPassword» будет принят в качестве пароля.PHP-хеширование пароля, возвращающее то же значение
После тестирования еще несколько я узнал, что следующий код приведет к созданию двух идентичных хэшей, хотя строка прошла не то же самое.
Важно знать, что все использованные соли генерируются этой функцией. Один из них создается для каждого теста, а тот же используется для хэширования обеих строк (точно так же, как при регистрации пользователя).
function GUID() {
if (function_exists('com_create_guid') === true) { return trim(com_create_guid(), '{}'); }
return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}
Вышеупомянутая функция была получена из вопроса переполнения стека, я не уверен, какой.
Это не тот случай, если пароль коренным образом изменен, см. Ниже для тестов.
В следующем фрагменте показаны два разных пароля, приводящих к одному и тому же хэшу.
$guid = GUID();
echo(crypt("TestPassword1234", $guid)); //455nKS7NToPuY
echo("<br />");
echo(crypt("TestPassword", $guid)); //455nKS7NToPuY (the same!)
Этот фрагмент кода показывает два разных паролей не приводящие к тому же результату, даже если они следуют той же схеме в приведенном выше фрагменте кода
$guid = GUID();
echo(crypt("Test1234", $guid)); //BBWxwWzIXAOQI
echo("<br />");
echo(crypt("Test", $guid)); //BBhe4TjDcO5XA (different...)
Я предполагаю, что проблема возникает из-за использования из GUID. Возможно, он неисправен или поддерживает только пароль с максимальной длиной x
. Я понятия не имею и не могу отследить тот вопрос, который я нашел.
Помощь очень ценится.
Вместо этого используйте 'password_hash'.Вы не должны генерировать соль самостоятельно, так как 'password_hash' автоматически генерирует для вас безопасную соль. –
Вы нашли эту функцию здесь - http://php.net/manual/en/function.com-create-guid.php#99425 – Drakes
Я не могу использовать 'password_hash', мой веб-хост использует версию PHP, которая не работает, t имеет эту функцию. – Harry