C#安全性記錄

 

安全性一直是開發中,重中之重的問題。不過平時用的不算特別多,基本上用個MD5,SSL也就到這了。再次記錄一下,以避免忘記。git

MD5屢次加密

MD5算法是不可逆算法。應用於密碼驗證,完整性驗證這種特徵。這裏爲了不窮舉法(暴力破解),能夠進行雙重加密。算法

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

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")]

相關文章
相關標籤/搜索