詳解php中的password_verify?和?password_hash密碼驗證
password_hash() 使用足夠強度的單向散列算法創(chuàng)建密碼的散列(hash)。
當前支持的算法:
PASSWORD_DEFAULT
- 使用 bcrypt 算法 (PHP 5.5.0 默認)。 注意,該常量會隨著 PHP 加入更新更高強度的算法而改變。 所以,使用此常量生成結(jié)果的長度將在未來有變化。 因此,數(shù)據(jù)庫里儲存結(jié)果的列可超過60個字符(最好是255個字符)。PASSWORD_BCRYPT
- 使用CRYPT_BLOWFISH
算法創(chuàng)建散列。 這會產(chǎn)生兼容使用 "$2y$" 的 crypt()。 結(jié)果將會是 60 個字符的字符串, 或者在失敗時返回false
。PASSWORD_ARGON2I
- 使用 Argon2i 散列算法創(chuàng)建散列。 只有在 PHP 編譯時加入 Argon2 支持時才能使用該算法。PASSWORD_ARGON2ID
- 使用 Argon2id 散列算法創(chuàng)建散列。 只有在 PHP 編譯時加入 Argon2 支持時才能使用該算法。
PASSWORD_BCRYPT
支持的選項:
salt
(string) - 手動提供散列密碼的鹽值(salt)。這將避免自動生成鹽值(salt)。
省略此值后,password_hash() 會為每個密碼散列自動生成隨機的鹽值。這種操作是有意的模式。
警告
鹽值(salt)選項已廢棄(deprecated)。 現(xiàn)在最好僅選擇使用默認產(chǎn)生的鹽值。 從 PHP 8.0.0 起,明確指定的 salt 值會被忽略。
cost
(int) - 代表算法使用的 cost。crypt() 頁面上有 cost 值的示例。
省略時,默認值是 10
。 這個 cost 是個不錯的底線,但也許可以根據(jù)自己硬件的情況,加大這個值。
PASSWORD_ARGON2I
和 PASSWORD_ARGON2ID
支持的選項:
memory_cost
(int) - 計算 Argon2 散列時的最大內(nèi)存(單位:KB)。默認值:PASSWORD_ARGON2_DEFAULT_MEMORY_COST
。time_cost
(int) - 計算 Argon2 散列時最多的時間。默認值:PASSWORD_ARGON2_DEFAULT_TIME_COST
。threads
(int) - 計算 Argon2 散列時最多的線程數(shù)。默認值:PASSWORD_ARGON2_DEFAULT_THREADS
。
加密:
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT)
驗證:
<?php // 想知道以下字符從哪里來,可參見 password_hash() 示例 $hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; if (password_verify('rasmuslerdorf', $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; } ?>
到此這篇關于php的password_verify 和 password_hash密碼驗證的文章就介紹到這了,更多相關php密碼驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
thinkphp3.2實現(xiàn)跨控制器調(diào)用其他模塊的方法
這篇文章主要介紹了thinkphp3.2實現(xiàn)跨控制器調(diào)用其他模塊的方法,結(jié)合實例形式分析了thinkPHP跨模塊、跨控制器調(diào)用方法的常見操作技巧,需要的朋友可以參考下2017-03-03Laravel5.1 框架關聯(lián)模型之后操作實例分析
這篇文章主要介紹了Laravel5.1 框架關聯(lián)模型之后操作,結(jié)合實例形式分析了laravel5.1框架寫入關聯(lián)模型、更新關聯(lián)關系等相關操作技巧與注意事項,需要的朋友可以參考下2020-01-01