国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何對(duì)用戶密碼進(jìn)行加密

張率功 / 2412人閱讀

摘要:結(jié)論對(duì)用戶密碼進(jìn)行加密時(shí)需要做到防止用戶密碼明文被竊聽(tīng)交給,明文傳輸。為什么鹽可以明文存儲(chǔ)攻擊者很難有足夠的計(jì)算資源和存儲(chǔ)空間建立海量的哈希值密碼數(shù)據(jù)庫(kù),針對(duì)單條用戶記錄,建立哈希值密碼數(shù)據(jù)庫(kù)進(jìn)行攻擊的成本過(guò)高。

摘要

密碼驗(yàn)證是很常見(jiàn)的需求,如何在實(shí)現(xiàn)功能之余,防止用戶密碼泄露,已經(jīng)有了很成熟的方案。這篇文章把自己的思考和結(jié)論做一下記錄。

結(jié)論

對(duì)用戶密碼進(jìn)行加密時(shí)需要做到:

防止用戶密碼明文被竊聽(tīng)

1.交給https,明文傳輸。
2.客戶端將密碼加鹽(鹽隨機(jī)生成、具有強(qiáng)度)并哈希。服務(wù)端再次加鹽哈希并對(duì)比。假設(shè)https被竊聽(tīng),攻擊者破解密碼明文也具有相當(dāng)難度。

防止數(shù)據(jù)庫(kù)被攻破時(shí),用戶密碼明文被竊取。

1.增加哈希算法強(qiáng)度。
2.隨機(jī)生成具有強(qiáng)度的鹽。

一些思考

哈希算法是不可逆的。攻擊者可以生成海量的密碼 -> 哈希值鍵值對(duì),反向映射,有概率通過(guò)哈希值得到密碼。
故,破解的成本=哈希算法強(qiáng)度×鹽值數(shù)量。

如何選擇哈希算法強(qiáng)度

計(jì)算耗時(shí)用戶可接受(視應(yīng)用場(chǎng)景,如0.2S內(nèi))。

計(jì)算耗時(shí)盡量長(zhǎng),即增加哈希算法強(qiáng)度。

為什么鹽要隨機(jī)

如果鹽不隨機(jī),攻擊者可以針對(duì)單個(gè)鹽生成哈希值->密碼鍵值對(duì),再對(duì)整個(gè)數(shù)據(jù)庫(kù)的哈希值做匹配。
假設(shè)鹽是保密的,鹽可能因?yàn)楦鞣N原因被攻擊者獲取(代碼泄漏、社會(huì)工程學(xué)等等)。
攻擊者也可以通過(guò)在數(shù)據(jù)庫(kù)被攻破的網(wǎng)站上注冊(cè)用戶,通過(guò) 哈希值->攻擊者密碼+鹽 來(lái)破解鹽。

為什么鹽要有強(qiáng)度

如果鹽的強(qiáng)度(長(zhǎng)度)不夠。攻擊者可以建立多個(gè) 哈希值->密碼 數(shù)據(jù)庫(kù),簡(jiǎn)單鹽被匹配(攻破)的概率更高。

為什么鹽可以明文存儲(chǔ)

攻擊者很難有足夠的計(jì)算資源和存儲(chǔ)空間建立海量的 哈希值->密碼 數(shù)據(jù)庫(kù),針對(duì)單條用戶記錄,建立 哈希值->密碼 數(shù)據(jù)庫(kù)進(jìn)行攻擊的成本過(guò)高。

php的實(shí)現(xiàn) 最初的想法

需求是房間密碼,出于簡(jiǎn)單考慮,我最初的想法是,MD5+隨機(jī)鹽。
在數(shù)據(jù)庫(kù)里大致是這樣:

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| uid  | int(11)    | NO  | PRI | NULL    |      |
| pwd  | varchar(45) | YES  |    | NULL    |      |
| salt  | varchar(45) | YES  |    | NULL    |      |
+-------+-------------+------+-----+---------+-------+
php的推薦實(shí)現(xiàn)

php的md5文檔
http://php.net/manual/zh/func...
給了一個(gè)很好的指引:
http://php.net/manual/zh/faq....

password_hash 和 crypt 函數(shù)返回值的組成部分,依次為:所選擇的算法,算法選項(xiàng),所使用的“鹽”,以及散列后的密碼。
更改后、數(shù)據(jù)庫(kù)表變?yōu)椋?/p>

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| uid  | int(11)    | NO  | PRI | NULL    |      |
| pwd  | varchar(255) | YES  |    | NULL    |      |
+-------+-------------+------+-----+---------+-------+

相較之前的方案:
1.記錄了采用的算法(可以在不改動(dòng)代碼的情況下升級(jí)算法)
2.記錄了采用算法的cost(強(qiáng)度),可以在硬件計(jì)算能力上升的情況下,調(diào)整cost來(lái)維持安全性。
3.鹽和哈希值一并返回,簡(jiǎn)化了接口調(diào)用、數(shù)據(jù)庫(kù)存儲(chǔ)。
php的驗(yàn)證接口設(shè)計(jì)得相當(dāng)漂亮。
使用簡(jiǎn)單,強(qiáng)制調(diào)用者使用隨機(jī)的salt(不容易誤用),可在不修改代碼的情況下拓展算法強(qiáng)度。
代碼:

if (!empty($xxxx_info["pwd"])) {    // 若原來(lái)有密碼,則要檢測(cè)
    if (!password_verify($old_pwd, $xxxx_info["pwd"])) {
        // 用戶名或密碼錯(cuò)
        return;
    }
}
// 對(duì)密碼長(zhǎng)度、內(nèi)容等不做限制。
// 以應(yīng)用場(chǎng)景來(lái)說(shuō),123456之類也無(wú)所謂。
$pwd_in_db = password_hash($new_pwd, PASSWORD_DEFAULT, array("cost" => 6));  
參考

http://php.net/manual/zh/faq....
http://www.infoq.com/cn/artic...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/26233.html

相關(guān)文章

  • 當(dāng)我們?cè)谡務(wù)撉岸?em>加密時(shí),我們?cè)谡勑┦裁?/b>

    摘要:所以我們今天只談前端加密,一個(gè)部分人認(rèn)為沒(méi)有意義的工作。在中,認(rèn)證過(guò)程使用了非對(duì)稱加密算法,非認(rèn)證過(guò)程中使用了對(duì)稱加密算法。非對(duì)稱加密上文中我們討論了前端的哈希加密以及應(yīng)用的場(chǎng)景。 showImg(https://segmentfault.com/img/bVAhTC); 當(dāng)然在談安全。 前端安全是Web安全的一部分,常見(jiàn)的安全問(wèn)題會(huì)有XSS、CSRF、SQL注入等,然而這些已經(jīng)在程師...

    wizChen 評(píng)論0 收藏0
  • FineReport中如何對(duì)cpt模板加密

    摘要:描述客戶使用報(bào)表并將其集成到自己的產(chǎn)品中,然后提供給最終用戶使用,最終用戶可以預(yù)覽模板,但是不能打開(kāi)模板進(jìn)行設(shè)計(jì)修改。點(diǎn)擊確定即可,然后就會(huì)對(duì)該工程下的所有模板進(jìn)行加密。注加密只能對(duì)工程下所有模板加密,不能單獨(dú)加密。 1.描述FR客戶使用FineReport報(bào)表并將其集成到自己的產(chǎn)品中,然后提供給最終用戶使用,最終用戶可以預(yù)覽FR模板,但是不能打開(kāi)模板進(jìn)行設(shè)計(jì)修改。FineReport...

    waruqi 評(píng)論0 收藏0
  • 區(qū)塊鏈學(xué)習(xí)之密碼學(xué)安全技術(shù)(五)

    摘要:非對(duì)稱加密算法的安全性往往需要基于數(shù)學(xué)問(wèn)題來(lái)保障,目前主要有基于大數(shù)質(zhì)因子分解離散對(duì)數(shù)橢圓曲線等經(jīng)典數(shù)學(xué)難題進(jìn)行保護(hù)。消息認(rèn)證碼基于對(duì)稱加密,可以用于對(duì)消息完整性進(jìn)行保護(hù)。 Hash 算法與數(shù)字摘要 Hash (哈希或散列)算法它能將任意長(zhǎng)度的二進(jìn)制明文串映射為較短的(通常是固定長(zhǎng)度的)二進(jìn)制串(Hash值),并且不同的明文很難映射為相同的Hash值。 Hash 定義 Hash (哈希...

    aboutU 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<