Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过mysql登录使用sha512哈希密码从mysql数据登录?_Php_Mysql_Login_Sha512 - Fatal编程技术网

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

Php 如何通过mysql登录使用sha512哈希密码从mysql数据登录?,php,mysql,login,sha512,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

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

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

If (usernameFromForm == usernameFromDatabase) && (shaPass == passwordFromDatabase){
login = true;
set session data;
redirect to home page
}else{
error etc}
所以只要加上

$password = hash('sha512', $password);
在查询之前。

使用

并使用以下工具检查sha512是否可用:

这真的很糟糕:)请仔细阅读SQL注入以及为什么应该使用预处理语句

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

当你sha一个字符串时,你会对它进行加密,所以如果你在数据库中有sha的密码,你就不能对它们进行比较

您需要询问用户的密码,然后根据该密码创建一个新字符串,该字符串也是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}

你应该从这个

中得到这个想法。这个答案有太多的错误,请考虑如何正确地实现基于哈希的密码AuthStury:不要重新实现认证!如果没有良好的概念知识,它将不得不被错误地编写!请使用经验证的库!这个主题已经被打败了,PHP的
crypt
函数主要处理细节。如果您正在使用SHA-x(位数无关)或未使用salt,或者不知道为什么不应该使用第一个,而需要使用后一个,请继续阅读-但实际上,请使用其他人测试过的代码!对于所有贴出的答案,除非你(至少是顺便)解决了与salt缺乏和hash函数选择不当有关的问题,否则你对OP和未来的读者都是有害的。但是,这又被打死了……我觉得自己真的很愚蠢。在我删除代码之前,我发现我将mysql密码字段“password”的字符串限制设置为99。密码超过99个字符。使用bcrypt、scrypt或pkdbf2都会创建一个较短的“密码”(这是密码的散列),当与salt一起使用时,实际上会产生一个经过验证/有效的方法。就像现在一样:呸。您还不如存储真正的密码。(事实上,存储真实密码会更糟糕,因为许多人在网站之间共享密码——uhg、使用KeePass和继续前进——而他们使用这种可怕的身份验证的可能性[希望]要低得多。)
get user password from form
shaPass = hash('sha512', $userInputFromForm);
if(shaPass == passwordFromDatabase){
return true;
}else{
return false;
If (usernameFromForm == usernameFromDatabase) && (shaPass == passwordFromDatabase){
login = true;
set session data;
redirect to home page
}else{
error etc}