Мы являемся платежным шлюзом, похожим на PayPal, каждому пользователю требуется учетная запись, и в последнее время у нас возникают проблемы с ресурсами из процесса создания учетной записи.Оптимизация функции проверки дубликатов паролей
Мы сузили, что это наша функция дублирования пароля, вызывающая базу данных, которая останавливает систему. Мы предоставили код для функции ниже. В таблице user_accounts
есть> 500 000 строк. Можно ли что-то сделать, чтобы оптимизировать эту функцию?
P.S. Мы понимаем, что SHA1 - это устаревший способ хранения паролей, мы рассматриваем обновления.
function duplicate_passwd_check($users_password) {
$pass_array = $sql->fetch("SELECT * FROM user_accounts");
foreach ($pass_array as $db_key => $db_value) {
// perform hashing
$salt = md5($users_password . SITE_PEPPER);
$hashed_users_password = sha1($users_password . $salt);
// perform check
if ($db_value['hashed_password'] == $hashed_users_password) {
$error->add("Password already in use, please use a different one.");
locate("register"); // redirect to register page
}
}
return 0;
}
Почему вы проверяете дубликаты против всех записей? Разумеется, добавление требуемого уровня сложности и проверка только фактического пользователя - лучший вариант? – ChrisBint
@ChrisBint Спасибо, но я не понимаю ваш комментарий? Как мы можем гарантировать, что люди не используют один и тот же пароль, не сравнивая свой пароль с теми, которые уже есть в базе данных? –
Почему на самом деле проблема заключается в том, что более одного человека использует один и тот же пароль, если их идентификатор пользователя отличается от другого? ___Who cares___ – RiggsFolly