2016-08-21 48 views
-2

通过运行此代码,我得到无效的密码。为什么密码与散列密码不匹配?php上的password_hash()函数/获取无效的密码

<?php 
    $passwd = "imad"; 
    $hash = password_hash($passwd,PASSWORD_DEFAULT,['cost'=>10]); 
    echo "$passwd".' :'.$hash."<br/><br/>"; 


    if (password_verify($passwd, $hash,['cost'=>10])) { 
     echo 'Password is valid!'; 
    } else { 
     echo 'Invalid password.'; 
    } 
?> 
+0

哈希是什么样的?它是否包含'$'? – RamRaider

+3

'if(password_verify($ passwd,$ hash)){//}'就足够了,验证时没有第三个参数。 – Ekin

+0

因为你没有'error_reporting'出现,或者你没有'display_errors'打开,或者你没有阅读手册。 ['password_verify'](http://php.net/password-verify)需要2个参数。你传递了3个参数。这意味着函数不会返回,而是会触发错误。 – Sherif

回答

0

password_verify期望的是2个参数。

所以,你需要做的只是:

if(password_verify($passwd, $hash)) { ... } 

和上面的代码可以简化为:通过使用ternary operators

(password_verify($passwd, $hash)) ? : echo "Password is valid!" : echo "Password is invalid." 


也转动error_reporting是一个好主意,一般在开发时。

于是就把:

ini_set("display_errors", "1"); 
error_reporting(E_ALL); 

,在你的文件的顶部。

而当你要将其移至生产阶段时,请将其移除。

+0

Tnx先生,你让我的一天:d –