我有一个注册系统设置,用于将注册密码哈希到sha512。我不知道如何使用这种类型的哈希密码登录。这是我的代码:
<?php
$host="localhost";
$username="root";
$password="";
$db_name="users";
$tbl_name="users";
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$username=$_POST['username'];
$password=$_POST['password'];
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
session_register("username");
session_register("password");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
?>
答案 0 :(得分:3)
这真的很糟糕:)阅读SQL注入以及为什么要改为使用预准备语句。
你问如何使用你写的代码很奇怪......
当你对一个字符串进行加密时,你加密它,所以如果你在数据库中有sha'd密码,你就无法比较它们。
您需要询问用户他们的密码,然后从那个也创建一个新的字符串,然后比较它们。类似的东西:
get user password from form
shaPass = hash('sha512', $userInputFromForm);
if(shaPass == passwordFromDatabase){
return true;
}else{
return false;
因此,您需要一个表单,您需要询问用户他们的用户名或电子邮件地址,无论您选择了什么,并要求他们提供密码。
在上面的示例中,(您确实应该更改)您将创建上面提到的shaPass,然后测试数据库中的条件。
If (usernameFromForm == usernameFromDatabase) && (shaPass == passwordFromDatabase){
login = true;
set session data;
redirect to home page
}else{
error etc}
你应该从那个
中得到这个想法答案 1 :(得分:2)
$hashed = hash('sha512', $password);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$hashed'"
答案 2 :(得分:1)
您需要将输入的密码与数据库中的哈希密码进行比较。 为此,您也可以对输入的密码进行哈希处理。如果密码有效,则散列应与数据库中的散列相同。
所以只需添加
$password = hash('sha512', $password);
在查询之前。
答案 3 :(得分:1)