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

相关文章
相关标签/搜索