Недавно я создал скрипт, который обрабатывает логин и регистрацию для моей игры, который использует метод http_get для обновления статистики. Мне удалось все успешно создать, но есть проблема. Когда пользователь регистрируется, он вставляет другую строку md5, сгенерированную PHP-скриптами, и из-за этого я не могу сравнивать пароли.
Вот как я вставляю строку md5 в базу данных:
$pw = md5($password);
$insert = mysqli_query($connect, "INSERT INTO Accounts (username, password, email,reg_ip, wins, looses, experience) VALUES ('$username', '$pw', '$email', '$reg_ip', '0','0', '0')");
if($insert) {
echo "account successfully created";
}
else {
echo "error";
}
И вот как я проверяю пароли:
if($p['password'] == md5($password)) {
echo "login was successful!";
}
else {
echo "incorrect password";
}
Это строка md5, которая находится в базе данных, когда пользователь регистрируется: (незашифрованная строка: pocakaj123)
54e8850ba5eca655854ddf1b503943
и это сгенерированная строка, когда я echo md5($password)
,
54e8850ba5eca655854ddf1b50394348
Это связано с длиной вашего поля в вашей базе данных. Вам нужно увеличить длину, чтобы вся строка могла уместиться.
В настоящее время он принимает только 30 символов, поэтому оставшиеся усекаются:
54e8850ba5eca655854ddf1b503943
Вам нужно увеличить длину как минимум до 32, чтобы уместить всю строку:
54e8850ba5eca655854ddf1b50394348
Замечания:
md5()
не является безопасным способом хеширования паролей, лучше bcrypt()
или вместо этого использовать функции хэширования паролей PHP, password_hash()
,
Причина, по которой md5()
не является безопасным:
Алгоритмы хеширования, такие как MD5, SHA1 и SHA256, разработаны, чтобы быть очень быстрыми и эффективными. С современными методами и компьютерным оборудованием стало просто «грубой силой» выводить эти алгоритмы, чтобы определить исходный ввод.
Ссылка от http://php.net/manual/en/faq.passwords.php.
Других решений пока нет …