更新后的代码仍无效?
<?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 :(得分: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,以便更安全