欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂PHP培訓(xùn)簡述PHP中常見的密碼處理方式

2019-07-16 14:29:10 4400瀏覽

本篇文章扣丁學(xué)堂PHP培訓(xùn)小編給小伙伴們介紹一下關(guān)于PHP中常見的密碼處理方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,感興趣的小伙伴就隨小編一起來了解一下吧。


扣丁學(xué)堂PHP培訓(xùn)簡述PHP中常見的密碼處理方式


在使用PHP開發(fā)Web應(yīng)用的中,很多的應(yīng)用都會要求用戶注冊,而注冊的時候就需要我們對用戶的信息進行處理了,最常見的莫過于就是郵箱和密碼了,本文意在討論對密碼的處理:也就是對密碼的加密處理。


密碼安全的重要性我們就不用再去強調(diào),隨著在線攻擊的增多,如果我們對密碼沒有進行合適的處理或做防御措施,我們的應(yīng)用就會肯定會收到來自各方的威脅和攻擊。



關(guān)于密碼我們應(yīng)該遵守的一些原則


1、絕對不能知道用戶的密碼


我們絕對不能知道用戶的密碼,也不能有獲取用戶密碼的方式。

知道的越少(包括我們開發(fā)者自己)越安全。


2、絕對不去約束用戶的密碼


最好不要去約束密碼的長度、格式等。

如果要求密碼符合一個特定的模式,其實對于那些不懷好意的人也提供了攻擊的途徑。

如果必須要約束的話,建議只限制最小長度。并把常用的密碼或基于字典創(chuàng)建的密碼加入黑名單,也是一個好主意。


3、絕對不通過電子郵件發(fā)送用戶的密碼


對于一個web應(yīng)用來說,重置或修改密碼時,我們應(yīng)該在郵件里發(fā)送用于設(shè)定或修改密碼的 URL 。而且這個URL中應(yīng)該會包含一個唯一的令牌,這個令牌只能在設(shè)定或修改密碼時使用一次。在設(shè)定或修改密碼之后,我們就應(yīng)該把這個令牌置為失效。



使用bcrypt計算用戶密碼的哈希值


目前,通過大量的審查,最安全的哈希算法是 bcrypt 。

首先,我們明確兩個概念,哈希、加密。哈希和加密有什么區(qū)別?


加密


加密是雙向算法,加密的數(shù)據(jù)之后通過解密還可以得到。



哈希


哈希是單向算法,哈希后的數(shù)據(jù)不能再還原成原始值。

哈希算法的用途,

驗證數(shù)據(jù)的完整性(要求算法速度快)

用戶提高密碼等需要單向驗證的數(shù)據(jù)的安全性(要求安全性高,甚至故意要求時間慢)

一般我們在數(shù)據(jù)庫中保存的應(yīng)該是計算出來的密碼的哈希值。這樣即使我們的數(shù)據(jù)庫泄露了,他們也只能看到這些無意義的密碼的哈希值。

哈希的算法有很多種。



MD5


MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現(xiàn)。將數(shù)據(jù)(如漢字)運算為另一固定長度值,是雜湊算法的基礎(chǔ)原理,MD5的前身有MD2、MD3和MD4。



SHA1


安全哈希算法(Secure Hash Algorithm)主要適用于數(shù)字簽名標(biāo)準(zhǔn) (Digital Signature Standard DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm DSA)。對于長度小于2^64位的消息,SHA1會產(chǎn)生一個160位的消息摘要。當(dāng)接收到消息的時候,這個消息摘要可以用來驗證數(shù)據(jù)的完整性。在傳輸?shù)倪^程中,數(shù)據(jù)很可能會發(fā)生變化,那么這時候就會產(chǎn)生不同的消息摘要。 SHA1有如下特性:不可以從消息摘要中復(fù)原信息;兩個不同的消息不會產(chǎn)生同樣的消息摘要,(但會有1x10 ^ 48分之一的機率出現(xiàn)相同的消息摘要,一般使用時忽略)。



bcrypt


bcrypt是專門為密碼存儲而設(shè)計的算法,基于Blowfish加密算法變形而來,由Niels Provos和David Mazières發(fā)表于1999年的USENIX?!crypt最大的好處是有一個參數(shù)(work factor),可用于調(diào)整計算強度,而且work factor是包括在輸出的摘要中的。隨著攻擊者計算能力的提高,使用者可以逐步增大work factor,而且不會影響已有用戶的登陸?!crypt經(jīng)過了很多安全專家的仔細分析,使用在以安全著稱的OpenBSD中,一般認為它比PBKDF2更能承受隨著計算能力加強而帶來的風(fēng)險。bcrypt也有廣泛的函數(shù)庫支持,因此我們建議使用這種方式存儲密碼。



scrypt


scrypt不僅計算所需時間長,而且占用的內(nèi)存也多,使得并行計算多個摘要異常困難,因此利用rainbow table進行暴力攻擊更加困難。scrypt沒有在生產(chǎn)環(huán)境中大規(guī)模應(yīng)用,并且缺乏仔細的審察和廣泛的函數(shù)庫支持 。但是,scrypt在算法層面只要沒有破綻,它的安全性應(yīng)該高于PBKDF2和bcrypt。


目前,通過大量的審查,最安全的哈希算法是 bcrypt 。與 MD5 和 SHA1 不同, bcrypt 算法會自動加鹽,來防止?jié)撛诘牟屎绫砉簟?bcrypt 算法會花費大量的時間反復(fù)處理數(shù)據(jù),來生成安全的哈希值。在這個過程中,處理數(shù)據(jù)的次數(shù)叫工作因子(work factor)。工作因子的值越高,破解密碼哈希值的時間會成指數(shù)倍增長。


bcrypt 算法永不過時,如果計算機的運算速度變快了,我們只需要提高工作因子即可。


順帶說一下,任何情況下盡可能的不要使用 md5 算法,至少也要使用 SHA 系列的哈希算法。因為md5算法以目前計算機的計算能力來說顯得比較簡單,而 md5 的性能優(yōu)勢現(xiàn)在也已經(jīng)完全可以忽略不計了。



密碼哈希API


上面我們說到 bcrypt 算法最安全,最適合對我們的密碼進行哈希。 PHP 在 PHP5.5.0+ 的版本中提供了原生的密碼哈希API供我們使用,這個密碼哈希API默認使用的就是 bcrypt 哈希算法,從而大大簡化了我們計算密碼哈希值和驗證密碼的操作。



PHP原生密碼哈希API


密碼哈希函數(shù):


password_get_info

返回指定的哈希值的相關(guān)信息

password_hash

創(chuàng)建密碼的哈希(hash)

password_needs_rehash

檢查給定的哈希是否與給定的選項匹配

password_verify

驗證密碼是否和哈希匹配



想要了解更多關(guān)于PHP開發(fā)方面內(nèi)容的小伙伴,請關(guān)注扣丁學(xué)堂PHP培訓(xùn)官網(wǎng)、微信等平臺,扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育有專業(yè)的PHP講師為您指導(dǎo),此外扣丁學(xué)堂老師精心推出的PHP視頻教程定能讓你快速掌握PHP從入門到精通開發(fā)實戰(zhàn)技能??鄱W(xué)堂PHP技術(shù)交流群:374332265。


扣丁學(xué)堂微信公眾號                          Python全棧開發(fā)爬蟲人工智能機器學(xué)習(xí)數(shù)據(jù)分析免費公開課直播間


【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】         【掃碼進入Python全棧開發(fā)免費公開課】



查看更多關(guān)于“php培訓(xùn)資訊”的相關(guān)文章>>


標(biāo)簽: PHP培訓(xùn) PHP視頻教程 PHP在線視頻 PHP學(xué)習(xí)視頻 Laravel框架

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部