不能与加密口令从数据库

问题描述:

登录我可以通过简单地围绕它包装加密我用MD5密码 -不能与加密口令从数据库

$Password = md5($_POST['password']); 

加密的密码被存储在数据库中成功当用户注册。但是,当我想用​​纯文本密码登录时,它决定不了。我该如何解决这个问题?

<?php 

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

$Email = $_POST['email']; 
$Password = $_POST['password']; 



$Email = mysqli_real_escape_string($connection, $Email); 
$Password = mysqli_real_escape_string($connection, $Password); 

$query ="SELECT * FROM customers WHERE Email = '{$Email}' AND Password = '{$Password}'"; 


$select_customer_query = mysqli_query($connection, $query); 

if (!$select_customer_query) 

die("QUERY FAILED". mysqli_error($connection)); 

} 

while($row = mysqli_fetch_array($select_customer_query)) { 

$Email_db = $row['Email']; 
$Password_db = $row['Password']; 
$Firstname_db = $row['First_Name']; 
$Lastname_db = $row['Last_Name']; 
$string ="logged in as"; 
$logoutlink = '/ <a href="includes/back/logout.php">Logout</a>'; 



} 


if ($Email_db == $Email || $Password_db == $Password ) { 


header("Location: ../../index.php"); 



$_SESSION['FirstName'] = $Firstname_db; 
$_SESSION['LastName'] = $Lastname_db; 
$_SESSION['string'] = $string; 
$_SESSION['logoutlink'] = $logoutlink; 


} 


?> 
+2

你不在将密码传递给SQL查询进行比较之前再次输入密码... –

+0

以及如何我做这个? – steve

+0

更改$ Password = mysqli_real_escape_string($ connection,$ Password);到$ Password = md5($ Password); –

在这一行:

$Password = $_POST['password']; 

需要改变:因为你需要比较加密passowrds

$Password = md5($_POST['password']); 

+0

我试过了。这没有用! – steve

+0

这不是加密。 –

你忘了在比较之前md5()密码,则需要比较md5()版本:

$Password = md5($_POST['password']); 

目前,你是比较$Password_db == $Password

$Password = $_POST['password']; //Not md5() hashed 
$Password_db = $row['Password']; //md5() hashed 

只是一个提示,你应该”不使用md5(),因为它不安全。

+0

@steve如果这不起作用(不应该是这种情况),请尝试回显“$ Password”和“$ Password_db”值来仔细检查值。 – Panda

+0

谢谢你Luweigi。你推荐哪种加密方法? – steve

+1

@steve我会推荐'password_verify()',详见Scott的回答 – Panda

而不是你在做什么,是安全的,你会想要一个工作流程看起来是这样的:

  1. 抓斗从数据库中的用户ID和密码的哈希值,对于给定的客户。
  2. 如果password_verify($password, $storedHash),继续。

请勿将您的密码检查外包给SELECT查询。不要存储明文密码。不要使用MD5进行密码保护。不要调用MD5加密。

推荐阅读:

+1

感谢您的回复。我用它来处理password_verify()。 – steve