PHP哈希SHA256登录密码(与正常不同)


PHP hash SHA256 login password (different from normal)

这是我在注册页面上哈希密码的功能。

function hashPassword($orgPassword){
srand(date("s")); 
$chars = "abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 
$salt = ""; 
$num = strlen($chars); 
for($i=0;$i<15;$i++){ 
    $salt.= $chars[rand()%$num];
} 
$hashedPassword = "'$SHA'$".$salt."'$".hash('sha256',hash('sha256',$orgPassword).$salt);
return $hashedPassword;
}

这是我登录的 php。

<?php
$username = $_POST['user_name'];
$password = $_POST['user_password'];
$salt = "";
$hashed = "'$SHA'$".$salt."'$".hash('sha256',hash('sha256',$password).$salt);
$con=mysqli_connect("127.0.0.1", "root", "mypassword", "testdb");
if (mysqli_connect_errno($con)){
    echo "MySql Error: " . mysqli_connect_error();
    }
$query=mysqli_query($con,"SELECT * FROM user WHERE user_name='$username' &&  user_password='$hashed'");
$count=mysqli_num_rows($query);
$row=mysqli_fetch_array($query);
if ($count==1){
    echo "success";
}else {
    echo "Invaild Username Password";
}   
mysqli_close($con);
?>

但是登录.php总是给我"无效的用户名密码"。

谢谢阅读 如果您想了解更多细节,请询问,因为我不太擅长用英语解释。

我是泰国人,但我会尽力解释。

您的登录名中有一个空$salt。字符串不相等。此外,您最好使用 crypt() .根据用户名获取存储的密码,并以这种方式比较存储的哈希。

你为什么不写$hashed=hashPassword($password)来散列用户输入?

编辑:您的函数使用随机数,每次都会生成不同的哈希代码。要解决此问题,您可能应该使用内置的哈希函数,例如 sha512() .您可以在此处找到此类功能的列表。