久久久久久久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進行加密解密方法,對此有興趣的朋友可以學習下。
主站蜘蛛池模板: 日批免费观看 | 国产午夜精品一区二区三区 | 一区二区三区在线免费看 | 日本精品在线播放 | 国产婷婷| 97av视频在线观看 | 午夜大片 | 国产一级毛片精品完整视频版 | 粉色午夜视频 | 亚洲国产中文字幕 | av一级久久 | 日韩欧美在线不卡 | 国产高清一区二区三区 | 天堂素人约啪 | 欧美不卡在线 | 视频一区 国产精品 | 久久免费视频在线 | 欧美日韩国产在线观看 | 午夜在线视频一区二区三区 | 国产成人精品免高潮在线观看 | 久久亚洲一区二区三区四区 | 999国产视频 | 免费一级黄色 | 日韩欧美视频在线 | 精品一二三区视频 | 亚洲国产精品精华素 | 成人免费精品 | 99亚洲 | 玖玖操 | 欧美精品在欧美一区二区少妇 | 国产一区二区麻豆 | 久久久网| 久久精彩视频 | 99色播| 欧美精品网 | 久久精品视频一区二区 | 激情欧美一区二区三区 | 国产成人久久精品一区二区三区 | 一区二区三区欧美在线观看 | 一级看片免费视频囗交动图 | 日韩精品久久久 |