當前位置:編程學習大全網 - 源碼下載 - 如何安全的存儲用戶密碼

如何安全的存儲用戶密碼

大多數的web開發者都會遇到設計用戶賬號系統的需求。賬號系統最重要的壹個方面就是如何保護用戶的密碼。壹些大公司的用戶數據庫泄露事件也時有發生,所以我們必須采取壹些措施來保護用戶的密碼,即使網站被攻破的情況下也不會造成較大的危害。如果妳還在存儲用戶密碼的MD5,那可真的有點弱了。

保護密碼最好的的方式就是使用帶鹽的密碼hash(salted password hashing).對密碼進行hash操作是壹件很簡單的事情,但是很多人都犯了錯。接下來我希望可以詳細的闡述如何恰當的對密碼進行hash,以及為什麽要這樣做。

重要提醒

如果妳打算自己寫壹段代碼來進行密碼hash,那麽趕緊停下吧。這樣太容易犯錯了。這個提醒適用於每壹個人,不要自己寫密碼的hash算法 !關於保存密碼的問題已經有了成熟的方案,那就是使用phpass或者本文提供的源碼。

什麽是hash

hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

hash("hbllo") = 58756879c05c68dfac9866712fad6a93f8146f337a69afe7dd238f3364946366

hash("waltz") = c0e81794384491161f1777c232bc6bd9ec38f616560b120fda8e90f383853542

Hash算法是壹種單向的函數。它可以把任意數量的數據轉換成固定長度的“指紋”,這個過程是不可逆的。而且只要輸入發生改變,哪怕只有壹個bit,輸出的hash值也會有很大不同。這種特性恰好合適用來用來保存密碼。因為我們希望使用壹種不可逆的算法來加密保存的密碼,同時又需要在用戶登陸的時候驗證密碼是否正確。

在壹個使用hash的賬號系統中,用戶註冊和認證的大致流程如下:

1, 用戶創建自己的賬號

2, 用戶密碼經過hash操作之後存儲在數據庫中。沒有任何明文的密碼存儲在服務器的硬盤上。

3, 用戶登陸的時候,將用戶輸入的密碼進行hash操作後與數據庫裏保存的密碼hash值進行對比。

4, 如果hash值完全壹樣,則認為用戶輸入的密碼是正確的。否則就認為用戶輸入了無效的密碼。

5, 每次用戶嘗試登陸的時候就重復步驟3和步驟4。

在步驟4的時候不要告訴用戶是賬號還是密碼錯了。只需要顯示壹個通用的提示,比如賬號或密碼不正確就可以了。這樣可以防止攻擊者枚舉有效的用戶名。

還需要註意的是用來保護密碼的hash函數跟數據結構課上見過的hash函數不完全壹樣。比如實現hash表的hash函數設計的目的是快速,但是不夠安全。只有加密hash函數(cryptographic hash functions)可以用來進行密碼的hash。這樣的函數有SHA256, SHA512, RipeMD, WHIRLPOOL等。

壹個常見的觀念就是密碼經過hash之後存儲就安全了。這顯然是不正確的。有很多方式可以快速的從hash恢復明文的密碼。還記得那些md5破解網站吧,只需要提交壹個hash,不到壹秒鐘就能知道結果。顯然,單純的對密碼進行hash還是遠遠達不到我們的安全需求...

以上是下面鏈接文章裏的片段

具體請查看這個鏈接裏的文章:

/articles/web/28527.html

滿意望采納~

  • 上一篇:Sjson源代碼
  • 下一篇:WOW DZ的開鎖技能在哪裏學
  • copyright 2024編程學習大全網