2
포럼에서 해결책을 찾고 스택의 질문에 있지만 결과가 없으므로 내 마지막 희망입니다. 나는 패스워드 암호화를 위해 phpass를 사용하고있다. 스크립트는 잘 작동하지만, 로그인을하고 CheckPassword 함수를 사용할 때 항상 false를 반환한다. UPphpass CheckPassword 함수는 로그인하는 동안 항상 false를 반환합니다. 새내기 문제
로그인 : : 내 두 PHP 스크립트를 추가 해요
<?php
require 'phpass-0.3/PasswordHash.php';
require 'config.php';
$email = $_POST['email'];
$confirmed_email = $_POST['confirmed_email'];
$username = $_POST['username'];
$password = $_POST['password'];
if ($_SERVER['REQUEST_METHOD'] === "POST") {
if(!preg_match("^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})$^", $email))
{
$errors[] = "Incorrect email format.";
}
if (($email)!==($confirmed_email))
{
$errors[] = "Emails do not match";
}
if ((strlen($username) < 5) || (!ctype_alnum($username)))
{
$errors[] = "Username must be min 6 signs and only include 0-9, A-Z characters.";
}
if ((strlen($password) < 7) || (!ctype_alnum($password)))
{
$errors[] = "Password must be min 8 signs and only include 0-9, A-Z characters.";
}
$stmt = $db->prepare('SELECT * FROM users WHERE username = ? LIMIT 1');
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows == 1)
{
$errors[] = "Username is taken.";
}
else if (!count($errors)) {
$hasher = new PasswordHash(8, false);
$hash = $hasher->HashPassword($password);
if (strlen($hash) >= 20) {
$stmt = $db->prepare('insert into users (username, email, password) values (?, ?, ?)');
$stmt->bind_param('sss', $username, $email, $hash);
$stmt->execute();
$stmt->close();
$db->close();
}
}
Foreach($errors as $v) print "$v <br/>";
}
?>
LOGIN : 그냥 데모 스크립트와 I를의 원인
<?php
include 'config.php';
require 'phpass-0.3/PasswordHash.php';
if(isset($_POST['email'], $_POST['password'])) {
$email = $_POST['email'];
$password = $_POST['password'];
$stmt = $db->prepare("SELECT id, username, password FROM users WHERE email = ? LIMIT 1");
$stmt->bind_param('s', $email);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($user_id, $username, $hash);
$stmt->fetch();
$stored_hash = $hash;
$hasher = new PasswordHash(8, false);
$check = $hasher->CheckPassword($password, $stored_hash);
if ($check) {
echo"Logged IN";
} else {
echo "SOMETHING'S WRONG";
}
}
?>
는, 보안 문제에 관심을 지불하지 마십시오 아직도 배우고있어.
** TL; DR **. 질문을보다 간결하게하십시오. 우리가 더 필요하면 우리는 물어볼 것입니다. –
'var_dump ($ hasher-> CheckPassword ($ password, $ stored_hash));'출력은 무엇입니까? '$ check' 변수에 아무 것도 지정되어 있지 않은 것 같습니다. –
@AmalMurali yap, bool (false) – user2699508