安全性一直是开发中,重中之重的问题。不过平时用的不算特别多,基本上用个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")]

最新文章

  1. poj 1695
  2. asp.net中如何调取数据库中存储过程输出的两个变量
  3. Android -- EditText方法
  4. ACCESS自动编号重新从1开始
  5. C#.net 获取当前应用程序所在路径及环境变量
  6. SGU 171.Sarov zones
  7. 一些重要 Docker 命令的简单介绍
  8. 解决 apache poi 转换 word(docx) 文件到 html 文件表格没边框的问题
  9. python+selenium自动化软件测试(第12章):Python读写XML文档
  10. python数据存储技巧
  11. 懵逼的this指向
  12. 金融量化分析【day112】:量化平台的使用-初始化函数
  13. fork项目适合全局替换注释说明
  14. windows下vmware配置nat网络
  15. CSS——nth-child()
  16. os模块和shutil模块
  17. Arbiter
  18. [OpenCV] Samples 01: Geometry - 几何图形
  19. Devexpress VCL Build v2013 vol 14.1.3 发布
  20. 目标板通过nfs挂载根文件系统

热门文章

  1. 整型信号量和PV操作(计算机操作系统)
  2. SQL Server 诊断查询-(2)
  3. 【从零开始学习Hadoop】--1.Hadoop的安装
  4. 优化MySchool数据库设计总结
  5. python 常用模块之os、sys、shutil
  6. 从零自学Hadoop(06):集群搭建
  7. 交互式makefile
  8. Xstream学习资料
  9. Linux日志不记录问题
  10. 使用github之前的技能准备