安全性一直是開發中,重中之重的問題。不過平時用的不算特別多,基本上用個MD5,SSL也就到這了。再次記錄一下,以避免忘記。git
MD5算法是不可逆算法。應用於密碼驗證,完整性驗證這種特徵。這裏爲了不窮舉法(暴力破解),能夠進行雙重加密。算法
static void Main(string[] args) { string strText = "Chenxy"; Console.WriteLine(strText); Console.WriteLine(GetMd5Hash(strText)); Console.WriteLine(GetMd5HashStrong(strText)); Console.Read(); } /// <summary> /// MD5加密 /// </summary> static string GetMd5Hash(string input) { using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) { return BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(input))).Replace("-", ""); } } /// <summary> /// MD5加密強力.文字加密+哈希祕鑰加密.在進行md5加密 /// </summary> static string GetMd5HashStrong(string input) { string hashKey = "Chsndhas%4362** >.fdsa"; using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) { string hashCode = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(input))).Replace("-", "") + BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(hashKey))).Replace("-", ""); return BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(hashCode))).Replace("-", ""); } }
static void Main(string[] args) { string strFileHash = GetFileHash(@"C:\test.txt"); Console.WriteLine(strFileHash); Console.Read(); } static string GetFileHash(string filePath) { using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) using (Stream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { return BitConverter.ToString(md5.ComputeHash(fs)).Replace("-", ""); } }
對稱加密算法:首先須要發送方和接收方協定一個密鑰Key.密鑰必須是加密和解密之間可以推算出來的。最簡單的就是同一個密鑰。在公開通道中傳輸,即便第三方獲取了數據,因爲沒有密鑰,也是解密不了的。安全
非對稱加密算法:首先應有一個密鑰對,包含兩部份內容。公鑰(PK),私鑰(SK)公鑰一般用來加密,私鑰用來解密。非對稱加密中,公鑰和私鑰不能推算,更不能用同一個。服務器
對稱加密和非對稱加密,各有優缺點。非對稱加密突出優勢是用於解密的密鑰,永遠不須要傳遞給對方。缺點是非對稱加密複雜,致使解密速度慢。適合數據量小的場合。網絡
在加密中,有兩個關鍵字是必須知道的:ide
密鑰salt:在加密算法中主要是用來防止字段攻擊。salt是在密鑰導出以前在密鑰末尾引入的隨機字節,它使這類攻擊變得很是困難。加密
向量iv:在加密算法中也是起到加強破解難度的,在加密過程當中,每每會同時使用密碼和上一個數據塊的加密結果。由於要加密的第一個數據塊顯然不存在上一個數據塊,因此這個初始化向量就是被設計用來當作初始數據塊的加密結果。spa
SSL是用於Web安全的網絡協議。目前它已被普遍應用到各種網絡傳輸通訊中。SSL利用數字證書技術(非對稱加密),保證了通訊過程當中的惟一性、不可篡改性、不可依賴性。.net
在傳統的網絡傳輸中,咱們將通訊的雙方定義爲:服務器端和客戶端。假定服務器端是數字證書建立者,它保存好本身的私鑰,同時公佈了本身的公鑰給全部的客戶端。知足這個條件,來構建SSL通道。設計
首先,客戶端隨機生成一個字符串做爲密鑰K,而後用公鑰進行加密。並將加密後的密鑰發給服務器端。
服務器端用私鑰解密信息,獲取了客戶端的K,並確認了客戶端的身份。SSL通道創建。
服務器端和客戶端就能夠進行安全通訊了。過程是:發送方使用密鑰K對要傳輸的信息進行對稱加密,接收方則使用K進行解密。
模擬DEMO:https://coding.net/u/chenxygx/p/CodeSave/git/tree/master/SSLDemo
如須要對應用程序中的某個功能,進行登陸用戶限制。
能夠在方法上,添加。PrincipalPermission(SecurityAction.Demand, Role = @"Users")]