我測試了PHP的password_verify
,驗證不正確。我使用的是centOS和PHP版本5.3.3。我知道5.3.3版本的PHP不提供password_hash
函數,所以我已經使用了https://github.com/ircmaxell/password_compatPHP的BCrypt無法驗證密碼
但是,當我驗證它時總是用不同的密碼返回true。我的代碼有bug嗎?
這裏是我的代碼:
$password = 'k32AlGOPqvCzoh*Sp(Hdrr26]M=lQb00R&W=hew|-|([(03vp==A8%m?l=eA2^bs_|\qVV3WZ';
$verify_pw = 'k32AlGOPqvCzoh*Sp(Hdrr26]M=lQb00R&W=hew|-|([(03vp==A8%m?l=eA2^bs_|\qVV3WZasdasdasdasdqweqa13123';
$options = array(
'cost' => 15
);
$hash = password_hash($password, PASSWORD_BCRYPT,$options);
var_dump(password_verify($verify_pw ,$hash)); // always true
我不認爲你會在password_verify()中發現很多隨機數,但如果你真的相信代碼中存在錯誤,那麼你就創建一個[SSCCE](http://sscce.org/)來證明你的斷言並在[github的兼容包](https://github.com/ircmaxell/password_compat/issues)上發佈一個問題,或者關於[bugs.php.net](https://bugs.php)的錯誤報告.net /) –
但它真的發生在我身上,那是我非常難過的。我知道'password_verify()'應該可以正常工作,但仍然無法弄清楚在我的關卡中會發生什麼事情。或者我應該提供更多信息。 –
bcrypt by design * always *給出不同的散列輸出,看看[這個sof問題](http://stackoverflow.com/questions/8467819/bcrypt-generates-different-hashes-for-the-same-input)。或者只是嘗試[這個加密計算器](https://www.dailycred.com/article/bcrypt-calculator)。但是,我想知道您的不同密碼是指不同的純文本還是傳遞到bcrypt並吐出不同輸出的純文本 - 請驗證。另外,請注意您的哈希中的幾個第一個字符,它定義了哈希長度和鹽分,[wiki](https://en.wikipedia.org/wiki/Bcrypt)解釋了這一點。 –