安全性一直是开发中,重中之重的问题。不过平时用的不算特别多,基本上用个MD5,SSL也就到这了。再次记录一下,以免忘记。
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)公钥通常用来加密,私钥用来解密。非对称加密中,公钥和私钥不能推算,更不能用同一个。
对称加密和非对称加密,各有优缺点。非对称加密突出优点是用于解密的密钥,永远不需要传递给对方。缺点是非对称加密复杂,导致解密速度慢。适合数据量小的场合。
在加密中,有两个关键字是必须知道的:
密钥salt:在加密算法中主要是用来防止字段攻击。salt是在密钥导出之前在密钥末尾引入的随机字节,它使这类攻击变得非常困难。
向量iv:在加密算法中也是起到增强破解难度的,在加密过程中,往往会同时使用密码和上一个数据块的加密结果。因为要加密的第一个数据块显然不存在上一个数据块,所以这个初始化向量就是被设计用来当做初始数据块的加密结果。
SSL
SSL是用于Web安全的网络协议。目前它已被广泛应用到各类网络传输通信中。SSL利用数字证书技术(非对称加密),保证了通信过程中的唯一性、不可篡改性、不可依赖性。
在传统的网络传输中,我们将通信的双方定义为:服务器端和客户端。假定服务器端是数字证书创建者,它保存好自己的私钥,同时公布了自己的公钥给所有的客户端。满足这个条件,来构建SSL通道。
首先,客户端随机生成一个字符串作为密钥K,然后用公钥进行加密。并将加密后的密钥发给服务器端。
服务器端用私钥解密信息,获取了客户端的K,并确认了客户端的身份。SSL通道建立。
服务器端和客户端就可以进行安全通信了。过程是:发送方使用密钥K对要传输的信息进行对称加密,接收方则使用K进行解密。
模拟DEMO:https://coding.net/u/chenxygx/p/CodeSave/git/tree/master/SSLDemo
权限
如需要对应用程序中的某个功能,进行登录用户限制。
可以在方法上,添加。PrincipalPermission(SecurityAction.Demand, Role = @"Users")]