현재 Android 응용 프로그램을 개발 중이며 사용자 등록 및 로그인 절차에 PHP/MySQL/JSON을 사용하고 있습니다. 이제는 bcyrpt를 사용하여 사용자 데이터를 해시하고 싶습니다. 나는 완전히 PHP에 익숙하고 해싱을위한 튜토리얼을 많이 읽었지만 사용할 수있는 PHP 스크립트에 대한 적절한 튜토리얼을 찾지 못했습니다. password_hash() 함수를 시도했지만 작동하지 않습니다.PHP/MySQL/JSON을 사용하여 사용자 데이터에 bcrypt를 사용하는 방법
내 파일에 bcrypt를 어떻게 사용할 수 있는지 조언 해 주시겠습니까?
이 그 내 PHP 파일입니다
로그인
<?php
require("config.inc.php");
if (!empty($_POST)) {
$query = "
SELECT
id,
username,
password
FROM users
WHERE
username = :username
";
$query_params = array(
':username' => $_POST['username']
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error1. Please Try Again!";
die(json_encode($response));
}
$validated_info = false;
$row = $stmt->fetch();
if ($row) {
if ($_POST['password'] === $row['password']) {
$login_ok = true;
}
}
if ($login_ok) {
$response["success"] = 1;
$response["message"] = "Login successful!";
die(json_encode($response));
} else {
$response["success"] = 0;
$response["message"] = "Invalid Credentials!";
die(json_encode($response));
}
} else {
?>
<h1>Login</h1>
<form action="login.php" method="post">
Username:<br />
<input type="text" name="username" placeholder="username" />
<br /><br />
Password:<br />
<input type="password" name="password" placeholder="password" value="" />
<br /><br />
<input type="submit" value="Login" />
</form>
<a href="register.php">Register</a>
<?php
}
?>
당신이 password_hash() 함수를 호출하는 대신, 직접 암호를 저장하지 않아야하여 등록 스크립트에서
<?php
require("config.inc.php");
if (!empty($_POST)) {
if (empty($_POST['username']) || empty($_POST['password'])) {
$response["success"] = 0;
$response["message"] = "Please Enter Both a Username and Password.";
die(json_encode($response));
}
$query = " SELECT 1 FROM users WHERE username = :user";
$query_params = array(
':user' => $_POST['username']
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error1. Please Try Again!";
die(json_encode($response));
}
$row = $stmt->fetch();
if ($row) {
$response["success"] = 0;
$response["message"] = "I'm sorry, this username is already in use";
die(json_encode($response));
}
$query = "INSERT INTO users (username, password) VALUES (:user, :pass) ";
$query_params = array(
':user' => $_POST['username'],
':pass' => $_POST['password']
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error2. Please Try Again!";
die(json_encode($response));
}
$response["success"] = 1;
$response["message"] = "Username Successfully Added!";
echo json_encode($response);
} else {
?>
<h1>Register</h1>
<form action="register.php" method="post">
Username:<br />
<input type="text" name="username" value="" />
<br /><br />
Password:<br />
<input type="password" name="password" value="" />
<br /><br />
<input type="submit" value="Register New User" />
</form>
<?php
}
?>
난 못해를 'password_hash' 함수를 사용했는지 확인하십시오. 그 문제에 특별히 어떤 문제가 있습니까? 등록 할 때 암호를 해시 한 다음 로그인 할 때 사용자의 입력 암호를 해시하고 'password_verify'를 사용하여 두 해시를 비교하십시오. – halfer
[유용 할 수도 있습니다] (http://www.the-art-of-web.com/php/blowfish-crypt/) – iamgory
password_hash()를 사용하지 않았음에도 불구하고 나중에 사용하려는 경우, PHP를 사용하려면 서버에서 실행중인 PHP 5.5 이상이 필요합니다. – baao