2011-07-04 222 views
0

更新的代碼仍然不起作用?登錄加密密碼進行比較

<?php 

$host="localhost"; 
$username="root"; 
$password="power1"; 
$db_name="members"; 
$tbl_name="users"; 

string sha1 (string $Password [, bool $raw_output = false ]) 

$link = mysql_connect("$host", "$username", "$password")or die("cannot connect. Please contact us"); 
mysql_select_db("$db_name")or die("cannot select DB. Please contact us"); 

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

$Email = stripslashes($Email); 
$Password = stripslashes($Password); 
$Email = mysql_real_escape_string($Email); 
$Password = mysql_real_escape_string($Password); 

$sql="SELECT * FROM $tbl_name WHERE Email='$Email' AND password ='$Password'"; 
$result=mysql_query($sql, $link) or die ('Unable to run query:'.mysql_error()); 

$count=mysql_num_rows($result); 

if($count==1){ 
session_register("Email"); 
session_register("Password"); 
header("location:login_success.php"); 
} 
else { 
echo "Wrong Email or Password. Please Wait.<meta http-equiv='REFRESH' content='1;url=login.php'>"; 
} 
?> 

回答

0

如果您在數據庫中存儲的加密密碼(你應該,即使如果使用MD5或SHA1散列會更安全),那麼你只需要對其進行加密,並選擇與加密密碼的用戶帳戶。

$encPass = encrypt($_POST['password'], $key) 
$sql = "SELECT * FROM $tbl_name WHERE Email='" 
    . mysql_real_escape_string($_POST['email']) 
    . "' AND password = '" 
    . mysql_real_escape_string($encPass) . "'"; 

另外,還要確保在SQL查詢中使用時,他們逃離所有輸入 - 否則你的應用程序是開放的SQL注入攻擊。

+0

我很抱歉,但我很初學者,我會如何去做這件事?對不起 – spencer

+0

查看最新的答案。 – cweiske

+0

謝謝你,所以我會把這個,而不是: 函數加密($密碼,$密鑰){ $結果='';對於($ i = 1; $ i <= strlen($ Password); $ i ++)$ $ char = substr($ Password,$ i-1,1); $ keychar = substr($ key,($ i%strlen($ key)) - 1,1); $ char = chr(ord($ char)+ ord($ keychar)); $ result。= $ char; } return asc2hex($ result); } $ sql =「SELECT * FROM $ tbl_name WHERE Email ='$ Email'AND password ='$ Password'」; ($ sql = $ link)或死('無法運行查詢:'。mysql_error()); – spencer

0

如果我理解正確你的問題,我覺得你要尋找的是這樣的:

$Password = encrypt($_POST['Password'], $key); 

然後,在您的SQL查詢,$Password將包含加密版本,並且將加密的匹配數據庫中的密碼。

但是,忘記自定義encrypt函數並使用內置PHP哈希函數(如sha1)可能會更容易。

+0

確定即時通訊使用sha1,但它不工作:請參閱我的更新代碼 – spencer

+0

@spencer - 您所做的只是從文檔複製功能簽名!你需要實際調用函數:'$ Password = sha1($ password);' –

+0

哈哈,聽起來像是我會做的事謝謝我修復它(你修好了)哈哈 – spencer

1

首先,檢查this問題和this帖子,瞭解如何在數據庫中存儲密碼。

至於你的問題具體的,處理是

During registration>> 
Plain text -> Hash Function -> Hashed Password 

During login>> 
Plain text password entered by user -> Hashed password -> Check against stored hash 

希望這有助於!