2011-07-04 176 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 

希望这有助于!