2015-07-29 1 views
1

Я не могу совместить пароль, возвращаемый функцией crypt(), чтобы разрешить пользователям доступ. ФункцияКак я могу прочитать зашифрованный пароль из базы данных, чтобы пользователи могли получить доступ?

Мои cryptPassword:

function cryptPass($input, $rounds = 9) { 
    $salt = ''; 
    $saltChars = array_merge(range('A', 'Z'), range('a', 'z'), range(0, 9)); 
    for ($i = 0; $i < 22; $i++) { 
     $salt .= $saltChars[array_rand($saltChars)]; 
    } 
    return crypt($input, sprintf('$2y$%02d$', $rounds) . $salt); 
} 

Моя форма регистрации:

if($_POST['register']) { 
    if($_POST['username'] && $_POST['email'] && $_POST['password']) { 
     $username = mysqli_real_escape_string($dbCon, $_POST['username']); 
     $email = mysqli_real_escape_string($dbCon, $_POST['email']); 
     $password = mysqli_real_escape_string($dbCon, cryptPass($_POST['password'])); 
     // insert into databse... 
    } 
} 

Моя Войти Форма:

if($_POST['username'] && $_POST['password']) { 
    $username = mysqli_real_escape_string($dbCon, $_POST['username']); 
    $inputPassword = mysqli_real_escape_string($dbCon, $_POST['password']); 
    $password = "SELECT * FROM users WHERE password = '$inputPassword'"; 
    $hashedPass = cryptPass($password); 
    if(crypt($inputPassword, $hashedPass) == $hashedPass) { 
     die("<br>Password is a match. Log in"); 
    } else { 
     echo "<br>Passwords do not match!!! Do NOT log user in <br>"; 
    } 
} 

Я проверил, чтобы понять, почему я не могу войти пользователей in, это следующие результаты:

Имя
  • пользователя: 2, пароль: 2 - вход в систему -> Результаты ->

Пароли не совпадают !!! Не регистрировать пользователя в:

$inputPassword = 2 
$query password = SELECT * FROM users WHERE password = '2' 
$hashedPass = $2y$09$ICAfpjSJyXEp93JsUbhyieaeMX7KNC6vQSayc0nT6QLHWrMjdYQhi 
crypt($inputPassword, $hashedPass) = $2y$09$ICAfpjSJyXEp93JsUbhyie9dqXeWEVqCYGR3faLHveUp1LsJegxpu 

Как вы можете видеть, первая часть идентична ($ 2y $ 09 $ ICAfpjSJyXEp93JsUbhyie), однако другая часть постоянно меняется. Я полагаю, что это связано с солью, которую я добавляю? Если да, как я могу сопоставить пароли, чтобы разрешить доступ к моим пользователям?

+1

Вы никогда не запускаете свой запрос. так что вы шифруете свой SQL-запрос, что просто странно ... и почему вы так или иначе склеиваете результат запроса (если вы выполняете запрос?) Это означает, что вы храните пароли в открытом тексте в БД, что вызывает вопрос о том, почему вы хэш в первую очередь? 'crypt ($ pw_from_db) == crypt ($ pw_from_user)' бессмысленно, если у вас есть простой текст и может просто сделать '$ pw_from_db == $ pw_from_user' –

+0

Я не храню пароли в текстовом виде в базе данных. Я просто пропустил часть запроса на ввод кода из регистрационной формы, поскольку я полагал, что это не имеет отношения к делу. Когда я добавляю пользователя в свою базу данных, я сохраняю пароль от этой переменной: $ password = mysqli_real_escape_string ($ dbCon, cryptPass ($ _ POST ['password'])); – DSKyo

+0

Мне также интересно узнать, почему вы шифруете пароли. большинство людей будут вместо этого использовать хэш-пароль, используя пароль_hash(), сохранить это значение в db, а затем, когда пользователь войдет в систему, hash предоставленный пароль и сравните его с хэшем пароля, хранящимся в db. Мне не хватает причины для использования crypt()? – frymaster

ответ

Смежные вопросы