如何通过mysql登录使用sha512哈希密码从mysql数据登录?

时间:2013-07-22 23:14:36

标签: php mysql login sha512

我有一个注册系统设置,用于将注册密码哈希到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 个答案:

答案 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)

使用hash() function

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

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

print_r(hash_algos());