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

首頁 > 編程 > C# > 正文

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

2019-10-29 21:15:53
字體:
來源:轉載
供稿:網友

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

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

C#,加密

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

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

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

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

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

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

C#,加密

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

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

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

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

C#,加密

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

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

C#,加密

(三) 為密碼加鹽(Salt)

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

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

C#,加密

(四) 在.NET中的實現

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

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

C#,加密

下面的代碼演示如何注冊一個新帳戶。鹽的生成可以使用新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");  } }

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

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VEVB武林網!


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
奇米成人av国产一区二区三区| 欧美性xxxx极品高清hd直播| 久久久久久成人精品| 一区二区欧美久久| 欧美福利小视频| 一区二区欧美亚洲| 8090成年在线看片午夜| 精品欧美激情精品一区| 亚洲国产高潮在线观看| 亚洲欧美视频在线| 中文字幕免费国产精品| 国产精品视频网站| 91精品在线播放| 久久成人国产精品| 亚洲va欧美va国产综合剧情| 欧美日韩一区二区免费在线观看| 亚洲欧洲av一区二区| 亚洲精选在线观看| 欧美日韩亚洲一区二区| 日韩av中文字幕在线| 国产欧美日韩最新| 亚洲香蕉av在线一区二区三区| 日韩精品在线免费观看视频| 国产91av在线| 欧美诱惑福利视频| 精品久久久在线观看| 国产精品激情av在线播放| 久久精品中文字幕一区| 欧美激情极品视频| 亚洲电影天堂av| 91成品人片a无限观看| 久久久久久久国产精品| 日韩精品在线影院| 欧美一级黑人aaaaaaa做受| 色老头一区二区三区| 国产欧美一区二区三区在线看| 亚洲乱码一区av黑人高潮| 欧美激情乱人伦一区| 亚洲资源在线看| 欧美色视频日本版| 午夜精品久久久久久久白皮肤| 91欧美日韩一区| 最近2019中文免费高清视频观看www99| 清纯唯美亚洲综合| 欧美精品videos性欧美| 亚洲欧美国产精品久久久久久久| 亚洲女同精品视频| 久久久久国产视频| 18性欧美xxxⅹ性满足| 欧美在线亚洲一区| 久久精品精品电影网| 激情av一区二区| 欧洲美女7788成人免费视频| 国产mv免费观看入口亚洲| 欧美老少配视频| 九九热精品在线| 亚洲第一视频网站| 亚洲成人av资源网| 日日狠狠久久偷偷四色综合免费| 亚洲最新视频在线| 久久99热这里只有精品国产| 中国日韩欧美久久久久久久久| 国产主播精品在线| 欧美午夜精品久久久久久浪潮| 日韩av在线免费观看一区| 欧美日韩国产在线看| 91精品久久久久久久久青青| 欧美成人一二三| 国产成人精品电影| 色老头一区二区三区| 亚洲欧美综合v| 久久中文字幕国产| 日韩va亚洲va欧洲va国产| 亚州精品天堂中文字幕| 国产午夜精品一区二区三区| 成人久久一区二区三区| 在线日韩欧美视频| 一本色道久久综合狠狠躁篇的优点| 国产成人精品午夜| 亚洲电影免费观看高清完整版在线| 亚洲成人在线视频播放| 久久97精品久久久久久久不卡| 亚洲一区二区三区四区视频| 亚洲精品suv精品一区二区| 亚洲自拍欧美色图| 成人h视频在线| 亚洲午夜精品久久久久久性色| 伊人久久久久久久久久久久久| 欧美亚洲国产视频| 国产成人亚洲综合青青| 伊人久久男人天堂| 性夜试看影院91社区| 欧美性生交大片免费| 日韩欧美一区二区三区久久| 精品国产自在精品国产浪潮| 亚洲美女免费精品视频在线观看| 色老头一区二区三区在线观看| 亚洲国产精品中文| 91国产中文字幕| www.美女亚洲精品| 精品国产乱码久久久久久婷婷| 亚洲男人的天堂网站| 国产精品三级美女白浆呻吟| 亚洲一区二区三区在线免费观看| 日本一本a高清免费不卡| 91国内精品久久| 美女国内精品自产拍在线播放| 欧美激情中文字幕乱码免费| 欧美自拍大量在线观看| 亚洲乱码一区av黑人高潮| 成人国产精品一区| 色综合视频一区中文字幕| 欧美寡妇偷汉性猛交| 久久久久久久999| 日本亚洲精品在线观看| 日韩欧美在线视频免费观看| 国产精品入口日韩视频大尺度| 久久亚洲精品中文字幕冲田杏梨| 国产精品高潮呻吟久久av无限| 日韩精品久久久久久久玫瑰园| 久久中文字幕在线| 91大神在线播放精品| 亚洲精品久久久久中文字幕二区| 亚洲成av人影院在线观看| 黄色精品一区二区| 久久国产精品久久久| 免费91麻豆精品国产自产在线观看| 精品人伦一区二区三区蜜桃免费| 国产999视频| 亚洲最大的成人网| 国产精品久久一区主播| 国产精品久久久久av免费| 亚洲欧美国产日韩天堂区| 欧美性jizz18性欧美| 亚洲www在线观看| 亚洲成人av资源网| 日韩精品在线第一页| 日韩电影中文字幕av| 久久久www成人免费精品张筱雨| 欧美怡春院一区二区三区| 国产成人激情视频| 国产成人在线亚洲欧美| 久久久久亚洲精品成人网小说| 欧美激情一区二区三区在线视频观看| 欧美国产日韩一区二区| 欧美激情中文字幕乱码免费| 国产精品黄色av| 菠萝蜜影院一区二区免费| 欧美激情a∨在线视频播放| 欧美国产亚洲精品久久久8v| 欧美亚洲国产视频| 欧美精品一区二区三区国产精品| 国产精品亚洲网站| 国产精品久久久久久久久久三级| 亚洲综合成人婷婷小说| 国产一区深夜福利| 最近2019好看的中文字幕免费| 国产suv精品一区二区| 狠狠躁夜夜躁人人爽天天天天97| 日本久久久久久久| 日韩小视频网址| 日韩在线观看免费高清完整版| 大胆欧美人体视频| 国产精品入口日韩视频大尺度|