溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP的password_hash功能介紹

發(fā)布時(shí)間:2020-06-11 15:16:39 來(lái)源:億速云 閱讀:183 作者:鴿子 欄目:編程語(yǔ)言

password_hash

傳統(tǒng)的用戶名和密碼都采用加鹽的方式存儲(chǔ)加密信息,鹽值也需要存儲(chǔ)。

自PHP5.5.0之后,新增加了密碼散列算法函數(shù)(password_hash),password_hash() 使用足夠強(qiáng)度的單向散列算法創(chuàng)建密碼的散列(hash)。 password_hash() 兼容 crypt()。 所以, crypt() 創(chuàng)建的密碼散列也可用于 password_hash()。

說(shuō)明

password_hash不需要再單獨(dú)存儲(chǔ)鹽值,而且每次加密的值都不一樣,我們只需要存儲(chǔ)加密字符串,驗(yàn)證時(shí)用password_verify()方法即可得出結(jié)果!

當(dāng)前支持的算法:

PASSWORD_DEFAULT - 使用 bcrypt 算法 (PHP 5.5.0 默認(rèn))。 注意,該常量會(huì)隨著 PHP 加入更新更高強(qiáng)度的算法而改變。 所以,使用此常量生成結(jié)果的長(zhǎng)度將在未來(lái)有變化。 因此,數(shù)據(jù)庫(kù)里儲(chǔ)存結(jié)果的列可超過(guò)60個(gè)字符(最好是255個(gè)字符)。

PASSWORD_BCRYPT - 使用 CRYPT_BLOWFISH 算法創(chuàng)建散列。 這會(huì)產(chǎn)生兼容使用 "$2y$" 的 crypt()。 結(jié)果將會(huì)是 60 個(gè)字符的字符串, 或者在失敗時(shí)返回 FALSE。

PASSWORD_ARGON2I - 使用 Argon2 散列算法創(chuàng)建散列。

返回值:

返回散列后的密碼, 或者在失敗時(shí)返回 FALSE。

使用的算法、cost 和鹽值作為散列的一部分返回。所以驗(yàn)證散列值的所有信息都已經(jīng)包含在內(nèi)。 這使 password_verify() 函數(shù)驗(yàn)證的時(shí)候,不需要額外儲(chǔ)存鹽值或者算法的信息。

/**
 * 我們想要使用默認(rèn)算法散列密碼
 * 當(dāng)前是 BCRYPT,并會(huì)產(chǎn)生 60 個(gè)字符的結(jié)果。
 *
 * 請(qǐng)注意,隨時(shí)間推移,默認(rèn)算法可能會(huì)有變化,
 * 所以需要儲(chǔ)存的空間能夠超過(guò) 60 字(255字不錯(cuò))
 */
 
 
password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
 
輸出類(lèi)似結(jié)果:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

驗(yàn)證

$inputValue = '123456'; //用戶輸入的密碼
if(password_verify( $inputValue, '數(shù)據(jù)庫(kù)存儲(chǔ)的密碼')){
    //如果為真,則驗(yàn)證成功
}
 
輸出:
True  或 False

以上就是詳解PHP中password_hash的功能的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注億速云其它相關(guān)文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI