密码验证无法比较散列密码和用户输入的密码

时间:2016-12-11 20:02:04

标签: php mysql hash

我正在尝试将散列密码与用户输入的密码进行比较,但它不会验证并且密码不正确。我使用此代码来散列密码:$hashed_password = password_hash($me, PASSWORD_DEFAULT);

以下代码是登录检查页面

host=""; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 
$tbll_name="employees_table"; // Table name 
$tb2_name="system_users";
$tb3_name="managers_table";
// Connect to server and select databse.
$link = mysqli_connect("$host", "$username", "$password")or die("cannot connect"); 
mysqli_select_db($link,"$db_name")or die("cannot select DB");
$myusername=$_POST["myusername"];  
$mypassword=$_POST["mypassword"]; 

// To protect MySQL injection (more detail about MySQL injection )
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysqli_real_escape_string($link, $myusername);
$mypassword = mysqli_real_escape_string($link, $mypassword);


$statues = "active";

// from system table
if ($sql="SELECT * FROM $tb2_name WHERE User_id='".$myusername."' and statues='".$statues."'");
{

$wql="SELECT * FROM $tb2_name WHERE User_id='".$myusername."' ";
$result2 = mysqli_query($link, $wql);
$details = mysqli_fetch_array($result2, MYSQLI_BOTH);
$Name = $details["Company"];
$Surname = $details["First_name"];
$encrypted_password = $details["Password"];

上面的代码从数据库获取散列函数,下面的代码比较它们。但它显示密码不正确,即使他们输入正确的密码

if (password_verify($mypassword, $encrypted_password))
{ 

2 个答案:

答案 0 :(得分:3)

  

"我认为哈希密码大于30个字符所以它只是在30之后剪切。 - 杰罗姆"

您的查询失败了#34;默默地"因为密码列太短,你需要清除你现在的密码/哈希值,然后重新开始。

根据password_hash()功能手册:

http://php.net/manual/en/function.password-hash.php

  

PASSWORD_DEFAULT - 使用bcrypt算法(默认自PHP 5.5.0起)。请注意,此常量旨在随着时间的推移而变化,因为新的和更强大的算法被添加到PHP中。因此,使用此标识符的结果长度可能会随时间而变化。因此,建议将结果存储在数据库列中,该列可以扩展到超过60个字符(255个字符将是一个不错的选择)。

答案 1 :(得分:2)

将您的if语句更改为

if (password_verify($mypassword, $encrypted_password))
{ 

您的变量方式错误,$ encrypt未声明