Недавно я создал скрипт, который обрабатывает вход и регистрацию для моей игры, которая использует метод 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
md5
для хранения своих паролей, так что эта проблема не имеет значения. - person Luke Joshua Park   schedule 23.04.2016password_hash
иpassword_verify
пара безопасна и проста в использовании. При сохранении средства проверки пароля простого использования хеш-функции недостаточно, а простое добавление соли мало что дает для повышения безопасности. Вместо этого используйте такие функции, какPBKDF2
,Rfc2898DeriveBytes
,Argon2
,password_hash
,Bcrypt
или аналогичные функции с длительностью около 100 мс. Суть в том, чтобы заставить злоумышленника потратить значительное время на поиск паролей методом грубой силы. - person zaph   schedule 07.03.2018