2016-03-07 43 views
0

登錄我可以通過簡單地圍繞它包裝加密我用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); –

回答

0

在這一行:

$Password = $_POST['password']; 

需要改變:因爲你需要比較加密passowrds

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

+0

我試過了。這沒有用! – steve

+0

這不是加密。 –

2

你忘了在比較之前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

2

而不是你在做什麼,是安全的,你會想要一個工作流程看起來是這樣的:

  1. 抓鬥從數據庫中的用戶ID和密碼的哈希值,對於給定的客戶。
  2. 如果password_verify($password, $storedHash),繼續。

請勿將您的密碼檢查外包給SELECT查詢。不要存儲明文密碼。不要使用MD5進行密碼保護。不要調用MD5加密。

推薦閱讀:

+1

感謝您的回覆。我用它來處理password_verify()。 – steve