您的位置:首頁 > 教學(xué)課堂 > .NET技術(shù)
來源:長沙北大青鳥大計校區(qū)|發(fā)布時間:2015-07-19 09:55:50
本來打算寫一篇介紹如何實現(xiàn)用戶登錄功能的文章的,但因為時間有限,所以先介紹一下密碼的散列和ASP.NET Membership
1.加Salt散列
我們知道,如果直接對密碼進(jìn)行散列,那么黑客(統(tǒng)稱那些有能力竊取用戶數(shù)據(jù)并企圖得到用戶密碼的人)可以對一個已知密碼進(jìn)行散列,然后通過對比散列值得到某用戶的密碼。換句話說,雖然黑客不能取得某特定用戶的密碼,但他可以知道使用特定密碼的用戶有哪些。
加Salt可以一定程度上解決這一問題。所謂加Salt,就是加點“佐料”。其基本想法是這樣的——當(dāng)用戶首次提供密碼時(通常是注冊時),由系統(tǒng)自動往這個密碼里撒一些“佐料”,然后再散列。而當(dāng)用戶登錄時,系統(tǒng)為用戶提供的代碼撒上同樣的“佐料”,然后散列,再比較散列值,已確定密碼是否正確。
這里的“佐料”被稱作“Salt值”,這個值是由系統(tǒng)隨機(jī)生成的,并且只有系統(tǒng)知道。這樣,即便兩個用戶使用了同一個密碼,由于系統(tǒng)為它們生成的salt值不同,他們的散列值也是不同的。即便黑客可以通過自己的密碼和自己生成的散列值來找具有特定密碼的用戶,但這個幾率太小了(密碼和salt值都得和黑客使用的一樣才行)。
下面詳細(xì)介紹一下加Salt散列的過程。介紹之前先強(qiáng)調(diào)一點,前面說過,驗證密碼時要使用和最初散列密碼時使用“相同的”佐料。所以Salt值是要存放在數(shù)據(jù)庫里的。
2.ASP.NET Membership中的相關(guān)代碼
(省略關(guān)于Membership的介紹若干字)
本文Anders Liu僅研究了SqlMembershipProvider,該類位于System.Web.dll,System.Web.Security命名空間中。
首先,要使用Membership,必須先用aspnet_regsql.exe命令來配置數(shù)據(jù)庫,該工具會向現(xiàn)有數(shù)據(jù)庫中添加一系列表和存儲過程等,配置好的數(shù)據(jù)庫中有一個表aspnet_Membership,就是用于存放用戶帳戶信息的。其中我們所關(guān)注的列有三個——Password、PasswordFormat和PasswordSalt。
Password存放的是密碼的散列值,PasswordFormat存放用于散列密碼所使用的算法,PasswordSalt就是系統(tǒng)生成的Salt值了。
3.小結(jié)
本文只是簡單地介紹了加Salt散列的工作方式(而非原理)、ASP.NET Membership中對其的實現(xiàn)。通過本文大家雖然無法對加Salt加密的有點和原理“知其所以然”,但相信大家應(yīng)該大致了解了這種方式的使用方法,并能通過修改Membership的代碼實現(xiàn)自己的密碼散列存儲了。
由于時間有限,Anders Liu這篇文章寫得很潦草,羅列了不少代碼卻沒有系統(tǒng)性介紹,還望大家原諒。下一篇文章我將相對完整地介紹如何實現(xiàn)自己的用戶登錄(無需使用MembershipProvider,但同時也喪失了Login等控件為我們帶來的便利)。
全程面授,不高薪都難
申請成功后,我們將在24小時內(nèi)與您聯(lián)系
招生熱線: 4008-0731-86 / 0731-82186801
學(xué)校地址: 長沙市天心區(qū)團(tuán)結(jié)路6號
Copyright © 2006 | 湖南大計信息科技有限公司 版權(quán)所有
湘ICP備14017520號-3