2016-08-21 47 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 –