2016-06-20 138 views
0

我已经阅读了很多关于这个password_hash的文章,并且尽可能多地应用了我所读到的内容 但是password_verify仍然拒绝认证值,不管我尝试了多少。 PHP版本5.61.6和SQL版本5.7.9 任何形式的帮助表示赞赏,我已经从大量尝试串组合php password_verify仍然不能正常工作

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Administrator</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    </head> 
    <body> 
     <?PHP 
      //.......all variables are collected from html form.... 
      $conn = mysqli_connect("localhost", "uname", "pword", "dbname"); 
      mysqli_set_charset($conn, 'utf8'); 
      //.......`SN` column has the unique attribute 
      $sql = "SELECT * FROM Sign_Up WHERE `SN`=$sn"; 
      $result = mysqli_query($conn, $sql); 
      if (mysqli_num_rows($result) > 0) { 
       while ($row = mysqli_fetch_assoc($result)) { 
        $date = date('Y-m-j g:i:s'); 
        //.......idgen is a function previously defined 
        $id = idgen(); 
        //.......prints $id before hashing.... 
        echo $id."<BR>"; 
        $id = password_hash('$id', PASSWORD_DEFAULT); 
        //......string length before storing 
        echo strlen($id)."<BR>"; 
        //......table columns 
        $f = $row["FirstName"]; 
        $l = $row["LastName"]; 
        $bn = $row["BusinessName"]; 
        $ba = $row["BusinessAddress"]; 

        $sq = "INSERT INTO Distributors (`FirstName`, `LastName`, `BusinessName`, `BusinessAddress`) VALUES ('$f', '$l', '$bn', '$ba')"; 
        $res = mysqli_query($conn, $sq); 
       } 
      } 
     ?> 

    </body> 
</html> 

以及核查的哈希码耗尽是

<html> 
    <head> 
     <meta charset="UTF-8"> 
    </head> 
    <body> 

     <?PHP 

      $conn = mysqli_connect($servername, $username, $password, $dbname); 
      mysqli_set_charset($conn, 'utf8'); 
      //.....phone number has a unique attribute 
      $sql = "SELECT `ID` FROM Distributors WHERE `PhoneNumber`='number'"; 
      $result = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 
      $result1= mysqli_num_rows($result); 
      $look = mysqli_fetch_array($result)['ID']; 
      print $look."<BR>"; 
      $look = trim($look); 
      print $look."<BR>"; 
      print strlen($look)."<BR>"; 
      //......all print statements yields expected results and hashed password is stored 
      //......in VARCHAR (255)...I also tried CHAR 
      $ver = password_verify('user input data', '$look'); 
       if ($ver) { 

        print "ok"; 
       } 
       else { 
        print "no"; 
       } 


    ?> 

    </body> 
</html> 
+1

您散列字面string' $ id' ...和验证针对字串'$ look'测试。学习如何使用[PHP字符串](http://php.net/string)。 –

+0

'password_verify('user input data','$ look');'真的吗?将'用户输入数据'的密码字符串与看起来像'$ look'的哈希值进行比较?!? –

+0

...并且您正在验证文字字符串'$ look'。 –

回答

0

使用PHP变量没有任何引号或双引号中,""

$id = password_hash($id, PASSWORD_DEFAULT);   // no quotes around $id 

$ver = password_verify('user input data', "$look"); // double quotes around $look 

单引号的字符串不被解析,即视为字面STR当双引号字符串被解析时,因此变量名称会用它们的值进行扩展。

+0

我已经尝试在变量被哈希和变量被验证并且它仍然不起作用时删除所有引号 –

+1

抱歉,错误的评论。你说得对,我无法告诉你我有多开心。它的报价。我是哈希$ id而不是变量的内容 –

0

当散列使用:

$id = "school"; 
Password_hash($id); 

当验证使用:

Password_verify($id, $data_from_database);