登录加密密码进行比较

时间:2011-07-04 07:30:35

标签: php

更新后的代码仍无效?

<?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'>";
}
?>

4 个答案:

答案 0 :(得分: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

希望这有帮助!

答案 1 :(得分: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注入攻击开放。

答案 2 :(得分:0)

如果我正确地理解了你的问题,我认为你正在寻找的是这样的:

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

然后,在您的SQL查询中,$Password将包含加密版本,并将与数据库中的加密密码匹配。

但是,可能更容易忘记自定义encrypt函数并使用内置的PHP哈希函数,例如sha1

答案 3 :(得分:-1)

你可以使用php支持的md5哈希

http://php.net/manual/en/function.md5.php

md5在用户注册时对密码进行哈希处理,然后在每次用户尝试登录时对其进行比较

如果您在http协议上传递密码,那么在客户端使用javascript将其更改为md5,以便更安全

js md5:http://pajhome.org.uk/crypt/md5/