亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用哈希加鹽法來為密碼加密【轉】

2019-11-14 16:22:20
字體:
來源:轉載
供稿:網友

原創地址:http://www.49028c.com/jfzhu/p/4023439.html

轉載請注明出處

 

(一)為什么要用哈希函數來加密密碼

如果你需要保存密碼(比如網站用戶的密碼),你要考慮如何保護這些密碼數據,象下面那樣直接將密碼寫入數據庫中是極不安全的,因為任何可以打開數據庫的人,都將可以直接看到這些密碼。

clip_image001

 

解決的辦法是將密碼加密后再存儲進數據庫,比較常用的加密方法是使用哈希函數(Hash Function)。哈希函數的具體定義,大家可以在網上或者相關書籍中查閱到,簡單地說,它的特性如下:

(1)原始密碼經哈希函數計算后得到一個哈希值

(2)改變原始密碼,哈希函數計算出的哈希值也會相應改變

(3) 同樣的密碼,哈希值也是相同的

(4) 哈希函數是單向、不可逆的。也就是說從哈希值,你無法推算出原始的密碼是多少

有了哈希函數,我們就可以將密碼的哈希值存儲進數據庫。用戶登錄網站的時候,我們可以檢驗用戶輸入密碼的哈希值是否與數據庫中的哈希值相同。

 

clip_image002

 

由于哈希函數是不可逆的,即使有人打開了數據庫,也無法看到用戶的密碼是多少。

那么存儲經過哈希函數加密后的密碼是否就是安全的了呢?我們先來看一下幾種常見的破解密碼的方法。

 

(二)幾種常見的破解密碼的方法

最簡單、常見的破解方式當屬字典破解(Dictionary Attack)和暴力破解(Brute Force Attack)方式。這兩種方法說白了就是猜密碼。

 

clip_image003

 

字典破解和暴力破解都是效率比較低的破解方式。如果你知道了數據庫中密碼的哈希值,你就可以采用一種更高效的破解方式,查表法(Lookup Tables)。還有一些方法,比如逆向查表法(Reverse Lookup Tables)、彩虹表(Rainbow Tables)等,都和查表法大同小異。現在我們來看一下查表法的原理。

查表法不像字典破解和暴力破解那樣猜密碼,它首先將一些比較常用的密碼的哈希值算好,然后建立一張表,當然密碼越多,這張表就越大。當你知道某個密碼的哈希值時,你只需要在你建立好的表中查找該哈希值,如果找到了,你就知道對應的密碼了。

 

clip_image004

 

(三)為密碼加鹽(Salt

從上面的查表法可以看出,即便是將原始密碼加密后的哈希值存儲在數據庫中依然是不夠安全的。那么有什么好的辦法來解決這個問題呢?答案是加鹽。

鹽(Salt)是什么?就是一個隨機生成的字符串。我們將鹽與原始密碼連接(concat)在一起(放在前面或后面都可以),然后將concat后的字符串加密。采用這種方式加密密碼,查表法就不靈了(因為鹽是隨機生成的)。

 

clip_image005

 

(四).NET中的實現

在.NET中,生成鹽可以使用RNGCryptoServicePRovider類,當然也可以使用GUID。哈希函數的算法我們可以使用SHA(Secure Hash Algorithm)家族算法,當然哈希函數的算法有很多,比如你也可以采用md5。這里順便提一下,美國政府以前廣泛采用SHA-1算法,在2005年被我國山東大學的王小云教授發現了安全漏洞,所以現在比較常用SHA-1加長的變種,比如SHA-256。在.NET中,可以使用SHA256Managed類。

下面來看一段代碼演示如何在.NET中實現給密碼加鹽加密。加密后的密碼保存在MySQL數據庫中。

 

clip_image006

 

下面的代碼演示如何注冊一個新帳戶。鹽的生成可以使用新Guid,也可以使用RNGCryptoServiceProvider 類。將byte[]轉換為string,可以使用Base64String(我在以前的博客中介紹過Base64 編碼),也可以使用下面的ToHexString方法。

 

復制代碼
protected void ButtonRegister_Click(object sender, EventArgs e) {     string username = TextBoxUserName.Text;     string passWord = TextBoxPassword.Text;     // random salt     string salt = Guid.NewGuid().ToString();    // random salt     // you can also use RNGCryptoServiceProvider class                //System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();     //byte[] saltBytes = new byte[36];     //rng.GetBytes(saltBytes);     //string salt = Convert.ToBase64String(saltBytes);     //string salt = ToHexString(saltBytes);                      byte[] passwordAndSaltBytes = System.Text.Encoding.UTF8.GetBytes(password + salt);                byte[] hashBytes = new System.Security.Cryptography.SHA256Managed().ComputeHash(passwordAndSaltBytes);    string hashString = Convert.ToBase64String(hashBytes);    // you can also use ToHexString to convert byte[] to string     //string hashString = ToHexString(hashBytes);         var db = new TestEntities();     usercredential newRecord = usercredential.Createusercredential(username, hashString, salt);     db.usercredentials.AddObject(newRecord);     db.SaveChanges(); } string ToHexString(byte[] bytes) {     var hex = new StringBuilder();     foreach (byte b in bytes)     {         hex.AppendFormat("{0:x2}", b);     }     return hex.ToString(); } 
復制代碼

 

下面的代碼演示了如何檢驗登錄用戶的密碼是否正確。首先檢驗用戶名是否存在,如果存在,獲得該用戶的鹽,然后用該鹽和用戶輸入的密碼來計算哈希值,并和數據庫中的哈希值進行比較。

 

復制代碼
protected void ButtonSignIn_Click(object sender, EventArgs e) {     string username = TextBoxUserName.Text;     string password = TextBoxPassword.Text;    var db = new TestEntities();     usercredential record = db.usercredentials.Where(x => string.Compare(x.UserName, username, true) == 0).FirstOrDefault();     if (record == default(usercredential))     {         throw new applicationException("invalid user name and password");     }    string salt = record.Salt;     byte[] passwordAndSaltBytes = System.Text.Encoding.UTF8.GetBytes(password + salt);     byte[] hashBytes = new System.Security.Cryptography.SHA256Managed().ComputeHash(passwordAndSaltBytes);     string hashString = Convert.ToBase64String(hashBytes);    if (hashString == record.PasswordHash)     {         // user login successfully     }     else     {         throw new ApplicationException("invalid user name and password");     } }
復制代碼

 

(五)總結

單單使用哈希函數來為密碼加密是不夠的,需要為密碼加鹽來提高安全性,鹽的長度不能過短,并且鹽的產生應該是隨機的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩激情av在线免费观看| 国产精品视频久久久久| 日韩网站免费观看| 色天天综合狠狠色| 日韩高清中文字幕| 久久久国产精彩视频美女艺术照福利| 91热精品视频| 亚洲欧美日韩国产中文| 国产一区二区三区在线播放免费观看| 亚洲男人天堂2023| 亚洲国产精品人人爽夜夜爽| 久久精品国产欧美激情| 久久精品亚洲一区| 日韩在线观看免费网站| 日本在线精品视频| 亚洲男人第一av网站| 久久艹在线视频| 国产精品久久久久免费a∨| 久久av资源网站| 亚洲成人黄色网址| 97在线精品国自产拍中文| 91亚洲国产成人久久精品网站| 亚洲女同性videos| 亚洲成人1234| 亚洲欧洲免费视频| 日韩精品高清在线观看| 按摩亚洲人久久| 一色桃子一区二区| 欧美疯狂性受xxxxx另类| 成人一区二区电影| 91天堂在线观看| 亚洲欧美国产日韩天堂区| 97视频国产在线| 欧美成人午夜影院| 91免费精品视频| 欧美激情va永久在线播放| 亚洲a成v人在线观看| 91亚洲精品久久久| 欧美与欧洲交xxxx免费观看| 日韩av快播网址| 福利一区视频在线观看| 欧美日韩国产页| 中文字幕精品www乱入免费视频| 国语自产精品视频在免费| 久久精彩免费视频| 国产精品羞羞答答| 国产精品99久久久久久www| 欧美精品激情blacked18| 久久影院资源站| 亚洲精品有码在线| 久久久久久久久久久国产| 日韩大片在线观看视频| 91精品国产综合久久香蕉的用户体验| 亚洲毛片在线观看.| 欧美在线一区二区视频| 亚洲精品国产电影| 精品国产依人香蕉在线精品| 亚洲欧美一区二区精品久久久| 日韩一区二区精品视频| 国产69精品久久久久9| 精品久久久久久亚洲精品| 国产欧美亚洲视频| 51精品国产黑色丝袜高跟鞋| 久久久久www| 精品国产一区av| 亚洲精品视频免费| 欧美在线视频导航| 国内精品久久久久久久久| 亚洲欧美国产视频| 成人黄色av网| 欧美一级成年大片在线观看| 国产97在线视频| 国产成人精品免高潮在线观看| 欧美专区在线视频| 欧美—级a级欧美特级ar全黄| 欧美日韩在线看| 国产丝袜精品视频| 亚洲在线免费看| 国产精品99蜜臀久久不卡二区| 欧美高清视频在线播放| 欧美激情精品久久久久久蜜臀| 欧美与欧洲交xxxx免费观看| 国产91在线播放| 亚洲日韩中文字幕在线播放| 欧美大码xxxx| 亚洲影院色在线观看免费| 7777精品久久久久久| 久久频这里精品99香蕉| 日韩视频免费大全中文字幕| 91夜夜揉人人捏人人添红杏| 欧美亚洲日本网站| 欧美在线观看日本一区| 亚洲精品综合精品自拍| 国产精品亚洲第一区| 精品欧美一区二区三区| 久久亚洲国产成人| 7m精品福利视频导航| 国产成人自拍视频在线观看| 亚洲老司机av| 国产一区二区三区视频| 国产综合在线看| 精品成人国产在线观看男人呻吟| 成人国产精品免费视频| 欧美日韩免费在线观看| 日韩精品在线看| 久久香蕉国产线看观看av| 久久中文字幕在线| 精品视频在线导航| 久久国产精品视频| 国产精品久久视频| 欧美丰满少妇xxxxx做受| 69影院欧美专区视频| 欧美在线视频免费观看| 中文字幕亚洲第一| 欧美激情xxxxx| 亚洲iv一区二区三区| 欧美日韩免费一区| 97在线视频免费| 欧美国产第二页| 日本成人在线视频网址| 欧美一区二区色| 日本成熟性欧美| 午夜精品在线观看| 久久久999精品视频| 精品女同一区二区三区在线播放| 一区二区在线免费视频| 欧美主播福利视频| 国产精品旅馆在线| 69视频在线播放| 7m精品福利视频导航| 国产欧美日韩91| 精品亚洲夜色av98在线观看| 日本成人激情视频| 精品国产乱码久久久久久天美| 中文字幕欧美精品日韩中文字幕| 国产精品自产拍高潮在线观看| 欧美激情第一页xxx| 国产成人一区二区三区| 奇米成人av国产一区二区三区| yw.139尤物在线精品视频| 日韩欧美有码在线| 亚洲精品日韩激情在线电影| 国产美女搞久久| 91社影院在线观看| 精品一区二区三区三区| 日韩亚洲在线观看| www国产精品视频| 欧美午夜片欧美片在线观看| 91精品国产高清久久久久久| 啪一啪鲁一鲁2019在线视频| 免费不卡欧美自拍视频| 欧美国产日本在线| 国产成人精品国内自产拍免费看| 欧美一乱一性一交一视频| 中文字幕欧美精品日韩中文字幕| 亚洲成色777777女色窝| 91精品久久久久久久久中文字幕| 亚洲精品电影在线| 成人黄在线观看| 一区二区成人av| 欧美日韩国产中文精品字幕自在自线| 日韩av在线免费观看| 国产精品网址在线| 91在线播放国产|