詳解PHP中password_hash的功能

2020-07-16 10:05:56

password_hash

傳統的使用者名稱和密碼都採用加鹽的方式儲存加密資訊,鹽值也需要儲存。

自PHP5.5.0之後,新增加了密碼雜湊演算法函數(password_hash),password_hash() 使用足夠強度的單向雜湊演算法建立密碼的雜湊(hash)。 password_hash() 相容 crypt()。 所以, crypt() 建立的密碼雜湊也可用於 password_hash()。

說明

password_hash不需要再單獨儲存鹽值,而且每次加密的值都不一樣,我們只需要儲存加密字串,驗證時用password_verify()方法即可得出結果!

當前支援的演算法:

PASSWORD_DEFAULT - 使用 bcrypt 演算法 (PHP 5.5.0 預設)。 注意,該常數會隨著 PHP 加入更新更高強度的演算法而改變。 所以,使用此常數生成結果的長度將在未來有變化。 因此,資料庫裡儲存結果的列可超過60個字元(最好是255個字元)。

PASSWORD_BCRYPT - 使用 CRYPT_BLOWFISH 演算法建立雜湊。 這會產生相容使用 "$2y$" 的 crypt()。 結果將會是 60 個字元的字串, 或者在失敗時返回 FALSE。

PASSWORD_ARGON2I - 使用 Argon2 雜湊演算法建立雜湊。

返回值:

返回雜湊後的密碼, 或者在失敗時返回 FALSE。

使用的演算法、cost 和鹽值作為雜湊的一部分返回。所以驗證雜湊值的所有資訊都已經包含在內。 這使 password_verify() 函數驗證的時候,不需要額外儲存鹽值或者演算法的資訊。

/**
 * 我們想要使用預設演算法雜湊密碼
 * 當前是 BCRYPT,並會產生 60 個字元的結果。
 *
 * 請注意,隨時間推移,預設演算法可能會有變化,
 * 所以需要儲存的空間能夠超過 60 字(255字不錯)
 */
 
 
password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
 
輸出類似結果:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

驗證

$inputValue = '123456'; //使用者輸入的密碼
if(password_verify( $inputValue, '資料庫儲存的密碼')){
    //如果為真,則驗證成功
}
 
輸出:
True  或 False

推薦教學:《PHP視訊教學

以上就是詳解PHP中password_hash的功能的詳細內容,更多請關注TW511.COM其它相關文章!