2016-03-03 3 views
0

Так что я пытаюсь сделать так, чтобы введенные пользователем пароли были зашифрованы при сохранении в моей базе данных. С BCRYPT им удалось это сделать, однако теперь шифрование, хранящееся в db, не может войти в систему с выбранным им паролем. У кого-нибудь есть предложения, как я буду продолжать об этом?Хеширование паролей PHP mySQLI

Благодарен за любую помощь!

Заранее благодарен!

Register.php page below 

<?php 
require 'C:\wamp\www/projekt/connections.php'; 

if(isset($_POST['submit'])) { 


session_start(); 
$fname = $_POST['firstname']; 
$lname = $_POST['lastname']; 
$uname = $_POST['username']; 
$pwd = $_POST['password']; 

$hashedpassword = password_hash($pwd, PASSWORD_DEFAULT); 



$sql = $con->query("INSERT INTO users (FirstName, LastName, UserName, Password)VALUES('{$fname}', '{$lname}', '{$uname}', '{$hashedpassword}')"); 

if (password_verify($pwd, $hashedpassword)) { 


header('Location: login.php'); 
} 



} 

?> 

---------------------------------------------------------- 

login.php page below 

<?php 

$con = mysqli_connect("localhost","root","","userreg"); 

if(isset($_POST['login'])){ 

$uname = mysqli_real_escape_string($con,$_POST['Username']); 

$pwd = mysqli_real_escape_string($con,$_POST['Password']); 

$sel_user = "select * from users where UserName='$uname' AND Password='$pwd'"; 

$run_user = mysqli_query($con, $sel_user); 

$check_user = mysqli_num_rows($run_user); 

if($check_user>0){ 

$_SESSION['UserName']=$uname; 

echo "<script>window.open('startpage.php','_self')</script>"; 

} 

else { 

echo "<script>alert('Username or password is not correct, try again!')</script>"; 



} 

} 

?> 
+0

Извлекает редактировать на мой пост. – Son

ответ

2

Вы можете использовать php password_hash и password_verify. Это как хэш, так и соли.

//Store $hashedPassword in the database under the password column. 
$hashedPassword = password_hash($password, PASSWORD_BCRYPT); 

//Or you could use PASSWORD_DEFAULT over PASSWORD_BCRYPT which will default to php's current default method. 
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); 


//Query the database and pull out the hashed password. 
//Pass the user entered password and the retrieved/stored hash into the password_verify method. 
//If it is a match, it will return true. 
if (password_verify($password, $hashedPassword)) { 
    // Correct password 
} 

EDIT: Вот как поток должен идти в хэш/магазин/подтверждение пароля.

(Создание нового пользователя - пароль)

  1. Возьмите пользовательский ввод (не забудьте очистить весь пользовательский ввод/использовать подготовленные заявления Посмотрите на PDO/Mysqli!)

  2. Хешируйте пароль. $hashedPassword = password_hash($password, PASSWORD_DEFAULT); Параметр $password является пользователем.

  3. Сохраните новую переменную/хешированный пароль $hashedPassword в вашей базе данных.

На данный момент пользователь создан и их пароль/другая информация была сохранена в базе данных.

(Вход пользователя в)

  1. Возьмите пользовательский ввод (не забудьте очистить весь пользовательский ввод/использовать подготовленные заявления! Посмотрите на PDO/Mysqli)

  2. запрос баз данных и получить пароль пользователей (выберите пароль из базы данных, где имя пользователя/идентификатор совпадает с тем, что они ввели).

  3. Пропустите вход пользователей из шага 1, и retreieved пароль из шага 2 в метод: password_verify($password, $hashedPassword) - $password является пользовательский ввод, и $hashedPassword пароль, который мы вытащили из нашей базы данных. Этот метод вернет true, если пароль соответствует, и false, если нет.

-

if (password_verify($password, $hashedPassword)) { 

// Correct password 
//Set the session variables/whatever else you would like to do now that we have verified that the user has the correct password. 

} else { 

//Redirect the user/inform them that they have the incorrect username/password combination. 

} 
+0

Спасибо за ответ! Однако я все еще борется, возможно ли вам разработать немного больше? Im довольно новый, когда дело доходит до программирования и действительно нового в php и их функций. Вместо этого я попытался с PASSWORD_DEFAULT, и после запроса вы получите статус if. Я чувствую, что есть кое-что, что я пропустил. – Vanhorn

+0

Не проблема. Не могли бы вы обновить сообщение своим текущим кодом? – Son

+0

Готово!Я чувствую, что ваш комментарий «Передайте введенный пользователем пароль и полученный/сохраненный хеш в метод password_verify». что я не сделал правильно/вообще? – Vanhorn

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