久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP更安全的密碼加密機制Bcrypt詳解

這篇文章主要給大家介紹了關于PHP更安全的密碼加密機制Bcrypt的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。

前言

我們常常為了避免在服務器受到攻擊,數據庫被拖庫時,用戶的明文密碼不被泄露,一般會對密碼進行單向不可逆加密——哈希。

常見的方式是:

哈希方式 加密密碼
md5(‘123456') e10adc3949ba59abbe56e057f20f883e
md5(‘123456' . ($salt = ‘salt')) 207acd61a3c1bd506d7e9a4535359f8a
sha1(‘123456') 40位密文
hash(‘sha256', ‘123456') 64位密文
hash(‘sha512', ‘123456') 128位密文

密文越長,在相同機器上,進行撞庫消耗的時間越長,相對越安全。

比較常見的哈希方式是 md5 + 鹽,避免用戶設置簡單密碼,被輕松破解。

password_hash

但是,現在要推薦的是 password_hash() 函數,可以輕松對密碼實現加鹽加密,而且幾乎不能破解。

$password = '123456';
 
var_dump(password_hash($password, PASSWORD_DEFAULT));
var_dump(password_hash($password, PASSWORD_DEFAULT));

password_hash 生成的哈希長度是 PASSWORD_BCRYPT —— 60位,PASSWORD_DEFAULT —— 60位 ~ 255位。PASSWORD_DEFAULT 取值跟 php 版本有關系,會等于其他值,但不影響使用。

每一次 password_hash 運行結果都不一樣,因此需要使用 password_verify 函數進行驗證。

$password = '123456';
 
$hash = password_hash($password, PASSWORD_DEFAULT);
var_dump(password_verify($password, $hash));

password_hash 會把計算 hash 的所有參數都存儲在 hash 結果中,可以使用 password_get_info 獲取相關信息。

$password = '123456';
$hash = password_hash($password, PASSWORD_DEFAULT);
var_dump(password_get_info($hash));

輸出

array(3) {
 ["algo"]=>
 int(1)
 ["algoName"]=>
 string(6) "bcrypt"
 ["options"]=>
 array(1) {
 ["cost"]=>
 int(10)
 }
}

注意:不包含 salt

可以看出我當前版本的 PHP 使用 PASSWORD_DEFAULT 實際是使用 PASSWORD_BCRYPT

password_hash($password, $algo, $options) 的第三個參數 $options 支持設置至少 22 位的 salt。但仍然強烈推薦使用 PHP 默認生成的 salt,不要主動設置 salt。

當要更新加密算法和加密選項時,可以通過 password_needs_rehash 判斷是否需要重新加密,下面的代碼是一段官方示例

$options = array('cost' => 11);
// Verify stored hash against plain-text password
if (password_verify($password, $hash))
{
 // Check if a newer hashing algorithm is available
 // or the cost has changed
 if (password_needs_rehash($hash, PASSWORD_DEFAULT, $options))
 {
  // If so, create a new hash, and replace the old one
  $newHash = password_hash($password, PASSWORD_DEFAULT, $options);
 }
 // Log user in
}

password_needs_rehash 可以理解為比較 $algo + $optionpassword_get_info($hash) 返回值。

password_hash 運算慢

password_hash 是出了名的運行慢,也就意味著在相同時間內,密碼重試次數少,泄露風險降低。

$password = '123456';
var_dump(microtime(true));
var_dump(password_hash($password, PASSWORD_DEFAULT));
var_dump(microtime(true));
 
echo "\n";
 
var_dump(microtime(true));
var_dump(md5($password));
for ($i = 0; $i < 999; $i++)
{
 md5($password);
}
var_dump(microtime(true));

輸出

float(1495594920.7034)
string(60) "$2y$10$9ZLvgzqmiZPEkYiIUchT6eUJqebekOAjFQO8/jW/Q6DMrmWNn0PDm"
float(1495594920.7818)

float(1495594920.7818)
string(32) "e10adc3949ba59abbe56e057f20f883e"
float(1495594920.7823)

password_hash 運行一次耗時 784 毫秒, md5 運行 1000 次耗時 5 毫秒。這是一個非常粗略的比較,跟運行機器有關,但也可以看出 password_hash 運行確實非常慢。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對的支持。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結合實例形式分析了php實現針對有序表插值查找的相關操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實現服務端分頁的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實現APP微信支付的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實現的多維數組排序算法,結合實例形式對比分析了php針對多維數組及帶有鍵名的多維數組進行排序相關操作技巧與注意事項,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了php結合ajaxuploadfile實現無刷新文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細介紹了PHP開發接口使用RSA進行加密解密方法,對此有興趣的朋友可以學習下。
主站蜘蛛池模板: 久久动态图 | 久草成人 | 黄网站免费观看 | 欧美日在线 | 国产一级黄色 | 欧美精品国产 | 在线日韩视频 | 亚洲精品午夜 | www.四虎.com| 五月激情久久 | 日韩久久久 | 91精品国产日韩91久久久久久 | 成年人黄色片 | 在线观看日韩 | 欧美日韩第一区 | 波多野结衣一区二区三区在线观看 | 国产成人综合在线 | 天天澡天天狠天天天做 | 成人精品在线观看 | 天天操网 | 国产三级精品视频 | 亚洲性天堂 | 黄色大片av | 久久精品国产视频 | 成人午夜视频在线观看 | 精品在线观看视频 | www.日韩在线| 黄色成人在线观看 | 国产综合亚洲精品一区二 | 黄色片在线播放 | 国产欧美日韩一区二区三区 | 欧美日本国产 | 日韩欧美视频在线 | 欧美日韩在线不卡 | 四虎影视在线 | 欧美伊人久久 | 亚洲伊人av | 久久视频一区二区 | 在线观看日韩av | 欧美日韩免费视频 | 欧美性一区二区 |