基于哈希算法的web账户口令存储方法
web賬戶的口令不能直接明文存儲,這樣太不安全了,需要加密存儲。
估計基于安全哈希算法的存儲方式應該已經(jīng)廣泛使用了,不過奇怪的是網(wǎng)上難以找到相關應用的詳細資料。哈希算法可用于保障信息的完整性、抗抵賴性, 屬于單向算法,即便哈希的結果被截獲,對方也是無法還原出明文的。如果在哈希的過程中加入鹽值,那就更好了,可以起到混淆的作用。鹽值這個概念找不到定義,大概是指用戶間相互不同的信息,常見的用戶名、用戶郵箱、賬號注冊時間等。
類似地,選擇基于哈希的消息認證碼(HMAC)也可用于身份認證,安全性更強,如果各位對單純的hash不放心,可以使用HMAC。
也有資料提到通過非對稱加密算法加密后存儲,比如RSA,個人覺得這種方法的安全性不如哈希算法,使用起來也麻煩,需考慮系統(tǒng)后臺的密鑰管理,而一旦密鑰泄露,所以信息也就都白加密了。
2. 算法的選擇
哈希算法有很多,常見的有MD5和SHA系列。現(xiàn)在有個叫彩虹表的東西,窮舉某個哈希值所對應的明文,導致了MD5和SHA-1已經(jīng)不再安全。而SHA-256或SHA-512目前還是比較安全的,而且計算消耗的資源不會比MD5或SHA-1差太多。從代碼實現(xiàn)的角度考慮,各算法的參數(shù)都一樣,返回值類型也一樣,只是函數(shù)名和返回值長度變了,所以如果已使用了MD5或SHA-1,可很方便地切換到更安全的算法上。
3. 添加鹽值
以鹽值為用戶名,算法為SHA-256為例,用戶最終存儲在后臺的口令就可以為SHA256(" 用戶名+口令 " )。而登陸的時候,有兩種驗證策略:
- 可在客戶端計算出SHA256("輸入的用戶名+輸入的口令"),將計算的結果明文傳輸給服務端,由服務端比較該值與后臺數(shù)據(jù)庫中存儲的是否相同。
- 將輸入的用戶名,口令加密傳輸?shù)椒斩?#xff0c;在服務端計算 SHA256("輸入的用戶名+輸入的口令"),再與數(shù)據(jù)庫存儲的內(nèi)容做比較。加密傳輸現(xiàn)在比較流行的方法是HTTPS,這里就不多說了。
可以看到,服務端是不知道用戶的口令明文是什么,所以即便數(shù)據(jù)庫攻破,也不會泄露用戶的口令。
再說說添加鹽值的好處。大家都知道,最常見的口令是123456,假設有100個用戶都這么設置了,那么如果不加鹽值,這100個用戶后臺加密存儲的口令就一摸一樣了,這就是一個安全隱患。加了鹽值還可以增加彩虹表碰撞的難度,就算用戶使用了最簡單的口令,加了鹽值后也還是難以破解的。
鹽值最好選擇用戶注冊后,就不會再改變的信息,或是由這些信息計算后的另一個值。比如,如果鹽值設置成了用戶郵箱,那就要確保這個郵箱不能修改,否則一旦郵箱改了,HASH("新郵箱+口令")≠ HASH("舊郵箱+口令") ,從而用戶改了郵箱就不能再登錄了。
轉(zhuǎn)載于:https://www.cnblogs.com/todsong/archive/2012/04/22/2465178.html
總結
以上是生活随笔為你收集整理的基于哈希算法的web账户口令存储方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop 统计单词字数的例子
- 下一篇: 舍得