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

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

C#使用Salt+Hash來為密碼加密

2019-11-14 13:43:45
字體:
來源:轉載
供稿:網友

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

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

image

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

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

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

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

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

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

image

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

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

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

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

image

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

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

image

(三) 為密碼加鹽(Salt)

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

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

Picture1

(四) 在.NET中的實現

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

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

image

復制代碼
下面的代碼演示如何注冊一個新帳戶。鹽的生成可以使用新Guid,也可以使用RNGCryptoServiceProvider 類。將byte[]轉換為string,可以使用Base64String,也可以使用下面的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");     } }總結:單單使用哈希函數來為密碼加密是不夠的,需要為密碼加鹽來提高安全性,鹽的長度不能過短,并且鹽的產生應該是隨機的。 

本文轉自:http://www.csharpwin.com/csharpspace/13412r9615.shtml

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品美乳在线观看| 精品国偷自产在线视频99| 亚洲欧洲免费视频| 久久精品国亚洲| 欧美激情视频免费观看| 国产精品成人av性教育| 欧美多人爱爱视频网站| 欧美激情乱人伦一区| 亚洲免费成人av电影| 亚洲精品天天看| 亚洲欧美999| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲香蕉成人av网站在线观看| 激情久久av一区av二区av三区| 热99精品里视频精品| 久久精品国产视频| xvideos国产精品| 欧美性xxxxxxx| 精品亚洲aⅴ在线观看| 欧美xxxx18国产| 51ⅴ精品国产91久久久久久| 91产国在线观看动作片喷水| 成人午夜黄色影院| 亚洲日本成人女熟在线观看| 日韩av在线精品| 久热精品视频在线观看一区| 亚州欧美日韩中文视频| 欧美成人午夜激情视频| 国产日产久久高清欧美一区| 久久久久国色av免费观看性色| 欧美性高潮床叫视频| 日韩免费不卡av| 福利精品视频在线| 亚洲a区在线视频| 一色桃子一区二区| 精品国产拍在线观看| 亚洲视频在线观看视频| 欧美成人激情图片网| 国产一区二区三区中文| 欧美精品午夜视频| 日韩精品在线观| 日韩欧美在线国产| 中文字幕视频在线免费欧美日韩综合在线看| 一区二区三区天堂av| 日韩高清电影免费观看完整版| 久久久久久高潮国产精品视| 欧美激情a∨在线视频播放| 中文一区二区视频| 国产成人精品视频在线| 亚洲精品视频在线观看视频| 日韩精品免费在线视频观看| 久久av在线播放| 欧美另类交人妖| 亚洲自拍偷拍第一页| 亚洲国产精品成人精品| 亚洲国产精品视频在线观看| 美女啪啪无遮挡免费久久网站| 亚洲精品影视在线观看| 精品国产1区2区| www国产精品视频| 久久久久久久久综合| 高清在线视频日韩欧美| 欧美色欧美亚洲高清在线视频| 7m第一福利500精品视频| 国产成人精品日本亚洲| 91亚洲精品在线观看| 精品国产一区二区三区久久久| 77777亚洲午夜久久多人| 日韩亚洲欧美中文高清在线| 欧美激情亚洲视频| 中文字幕日韩有码| 亚洲精品乱码久久久久久金桔影视| 国产成人精品日本亚洲| 欧美日韩在线视频观看| 国产亚洲精品综合一区91| 亚洲欧美中文字幕在线一区| 亚洲精品720p| 日本亚洲欧美三级| www.日韩.com| 国产精品欧美一区二区| 国产成人精品av在线| 日韩av手机在线观看| 亚洲成人网在线观看| 国产精品一二三视频| 久久久成人的性感天堂| 青青青国产精品一区二区| 97碰在线观看| 亚洲最大中文字幕| 91高清免费视频| 在线播放日韩欧美| 91亚洲精品久久久| 久久精品国产一区| 国产日韩在线免费| 92版电视剧仙鹤神针在线观看| 欧美做爰性生交视频| 国产精品国产福利国产秒拍| 色青青草原桃花久久综合| 亚洲免费高清视频| 日本中文字幕久久看| 国产精品jizz在线观看麻豆| 8090成年在线看片午夜| 国产精品成人av性教育| 在线观看欧美日韩国产| 亚洲福利视频免费观看| 亚洲欧美中文字幕| 在线播放国产精品| 久久999免费视频| 国产精品免费久久久久影院| 亚洲综合在线小说| 欧美精品在线视频观看| 日韩hd视频在线观看| 国产日韩欧美视频| 欧美激情影音先锋| 国产91成人video| 久青草国产97香蕉在线视频| 一本色道久久综合亚洲精品小说| 亚洲综合中文字幕在线观看| 久久免费少妇高潮久久精品99| 亚洲国产精品热久久| 国产精品精品久久久久久| 国产亚洲美女精品久久久| 亚洲自拍偷拍在线| 欧美一级大片在线观看| 日韩av网址在线| 亚洲精品美女久久久| 亚洲免费av电影| 欧美成人剧情片在线观看| 亚洲最大福利视频网| 俺也去精品视频在线观看| 91久久久国产精品| 国产精品日韩专区| 国产aⅴ夜夜欢一区二区三区| 亚洲综合色av| 国产精品激情av电影在线观看| 国产亚洲精品美女久久久| 国产成人在线亚洲欧美| 97视频在线看| 国产精品成av人在线视午夜片| 日韩在线观看你懂的| 日韩视频在线免费| 亚洲美女精品成人在线视频| 国产精品va在线播放我和闺蜜| 激情懂色av一区av二区av| 日韩成人在线免费观看| 欧美国产精品人人做人人爱| 欧美色欧美亚洲高清在线视频| 国产精品日日摸夜夜添夜夜av| 欧美国产日韩一区二区在线观看| 国产精品久久77777| 成人欧美一区二区三区在线湿哒哒| 欧美日韩在线影院| 亚洲国产精品高清久久久| 精品女同一区二区三区在线播放| 日韩精品视频三区| 久久久久国产精品免费网站| 亚洲欧洲激情在线| 姬川优奈aav一区二区| 欧美精品久久久久久久久久| 国产va免费精品高清在线观看| 在线观看国产欧美| 日本一区二区三区四区视频| 欧美疯狂做受xxxx高潮| 97在线观看免费| 成人激情在线观看|