-2

我设置了一个注册系统,将注册密码散列到 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";
}
?>
4

4 回答 4

3

这真的很糟糕:) 阅读 SQL 注入以及为什么你应该使用准备好的语句。

奇怪的是你问如何使用你写的代码......

当你 sha 一个字符串时,你会对其进行加密,所以如果你在数据库中有 sha'd 密码,你根本无法比较它们。

您需要向用户询问他们的密码,然后从中创建一个也是 sha 的新字符串,然后比较它们。就像是:

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}

你应该从中得到想法

于 2013-07-22T23:25:41.907 回答
2
$hashed = hash('sha512', $password);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$hashed'"
于 2013-07-22T23:23:46.113 回答
1

您需要将输入的密码与数据库中的散列密码进行比较。为此,您也要对输入的密码进行哈希处理。如果密码有效,则哈希值应与数据库中的相同。

所以只需添加

$password = hash('sha512', $password);

查询前。

于 2013-07-22T23:24:22.250 回答
1

使用hash() 函数

$password = hash('sha512', $password);

并使用hash_algos()检查 sha512 是否可用:

print_r(hash_algos());
于 2013-07-22T23:24:24.257 回答