'扣丁學堂PHP培訓簡述PHP中常見的密碼處理方式'

"

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

"

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

扣丁學堂PHP培訓簡述PHP中常見的密碼處理方式

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

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

關於密碼我們應該遵守的一些原則

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

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

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

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

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

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

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

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

對於一個web應用來說,重置或修改密碼時,我們應該在郵件裡發送用於設定或修改密碼的 URL 。而且這個URL中應該會包含一個唯一的令牌,這個令牌只能在設定或修改密碼時使用一次。在設定或修改密碼之後,我們就應該把這個令牌置為失效。

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

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

首先,我們明確兩個概念,哈希、加密。哈希和加密有什麼區別?

加密

加密是雙向算法,加密的數據之後通過解密還可以得到。

哈希

哈希是單向算法,哈希後的數據不能再還原成原始值。

哈希算法的用途,

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

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

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

哈希的算法有很多種。

MD5

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

SHA1

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

bcrypt

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

scrypt

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

目前,通過大量的審查,最安全的哈希算法是 bcrypt 。與 MD5 和 SHA1 不同, bcrypt 算法會自動加鹽,來防止潛在的彩虹表攻擊。 bcrypt 算法會花費大量的時間反覆處理數據,來生成安全的哈希值。在這個過程中,處理數據的次數叫工作因子(work factor)。工作因子的值越高,破解密碼哈希值的時間會成指數倍增長。

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

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

密碼哈希API

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

PHP原生密碼哈希API

密碼哈希函數:

password_get_info

返回指定的哈希值的相關信息

password_hash

創建密碼的哈希(hash)

password_needs_rehash

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

password_verify

驗證密碼是否和哈希匹配

想要了解更多關於PHP開發方面內容的小夥伴,請關注扣丁學堂PHP培訓官網、微信等平臺,扣丁學堂IT職業在線學習教育有專業的PHP講師為您指導,此外扣丁學堂老師精心推出的PHP視頻教程定能讓你快速掌握PHP從入門到精通開發實戰技能。扣丁學堂PHP技術交流群:374332265。

Pyhon基礎課程:https://ke.qq.com/course/327534?flowToken=1008607 【掃碼進入Python全棧開發免費公開課】

H5基礎課程:https://ke.qq.com/course/320523?flowToken=1008606【掃碼進入HTML5前端開發VIP免費公開課】

JavaVIP課程:https://ke.qq.com/course/308771?taid=3521851708192291【掃碼進入JavaEE/微服務VIP免費公開課】

注:點擊(瞭解更多)進入課程直播間

"

相關推薦

推薦中...