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