Я установил два простых файла php для функции входа в систему / регистрации в моем приложении для Android.
Я хотел бы знать простой способ заставить его сохранить / записать зашифрованный пароль в базу данных mysql. на данный момент его единственное написание простого текста для пароля.
Код для register.php это:
$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$statement = mysqli_prepare($con, "INSERT INTO User (username, email, password) VALUES (?, ?, ?)" );
mysqli_stmt_bind_param($statement, "sss", $username, $email, $password);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
mysqli_close($con);
и код для входа в систему:
$password = $_POST["password"];
$username = $_POST["username"];
$statement = mysqli_prepare($con, "SELECT * FROM User WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($statement, "ss", $username, $password);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $userID, $username, $email, $password);
$user = array();
while(mysqli_stmt_fetch($statement)) {
$user[username] = $username;
$user[email] = $email;
$user[password] = $password;
}
echo json_encode($user);
mysqli_stmt_close($statement);
mysqli_close($con);
очень простой вопрос, я знаю, но просто учусь. Спасибо
РЕДАКТИРОВАТЬ:
Основываясь на ссылке / ответе Jamesking56, я выступил с этим, но теперь он вообще не пишет в БД:
$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
$statement = mysqli_prepare($con, "INSERT INTO User (username, email, password) VALUES (?, ?, ?)" );
mysqli_stmt_bind_param($statement, "sss", $username, $email, $passwordHash);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
mysqli_close($con);
Если вы используете PHP 5.5 или новее, есть несколько встроенных функций для хеширования паролей password_hash()
а также password_verify()
,
Никогда не используйте MD5 или SHA1 самостоятельно для хеширования пароля поскольку они могут быть полностью изменены, используя радужные столы.
Вы должны использовать механизм хеширования с определенным вами секретом, который дает вам хэши, уникальные для вашего приложения. «Секрет», который вы создаете, никогда не должен передаваться через VCS.
Хорошую статью об этом можно найти здесь: http://www.phptherightway.com/#password_hashing
Для тех, кто использует версии PHP ниже 5.5, вы можете использовать crypt()
:
http://php.net/manual/en/function.crypt.php
PHP 5.4 не будет поддерживаться с 14 сентября 2015 года, поэтому рассмотрите возможность обновления до 5.5.
Других решений пока нет …