2013-08-29 2 views
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"; 
    } 
} 
?> 

는, 보안 문제에 관심을 지불하지 마십시오 아직도 배우고있어.

+0

** TL; DR **. 질문을보다 간결하게하십시오. 우리가 더 필요하면 우리는 물어볼 것입니다. –

+1

'var_dump ($ hasher-> CheckPassword ($ password, $ stored_hash));'출력은 무엇입니까? '$ check' 변수에 아무 것도 지정되어 있지 않은 것 같습니다. –

+0

@AmalMurali yap, bool (false) – user2699508

답변

0

해시 된 암호가 60 자인지 확인하십시오. 더 이상 아무것도 false를 반환합니다. 동일한 문제가 있으며 첫 번째 해시 된 암호가 61 자임을 알았습니다.