首页 > 代码库 > 安全性之加密算法
安全性之加密算法
信息安全越来越重要的今天,系统设计和开发过程当中必要的加密技术必不可少,根据项目中的实际经验总结一下实际项目中安全使用场景。
系统内部密码使用md5加密,密码不可逆,不可使用任何手段让任何人获取用户的密码,如果安全级别更高一些可以多次md5或混合加密。
特殊字段的安全保密使用对称加密算法,常用的有DES/AES,对于当今的计算机发展速度,DES加密相对已经容易被破解,所以推荐使用AES进行加解密。
.Net的DES加密算法实现
/// <summary> /// 获取密钥 /// </summary> private static string Key { get { return @"ads{}[]19123456789123456789a},ds"; } } /// <summary> /// 获取向量 /// </summary> private static string IV { get { return @"123456789{},‘;s"; } } /// <summary> /// AES加密 /// </summary> /// <param name="plainStr">明文字符串</param> /// <returns>密文</returns> public static string AESEncrypt(string plainStr) { byte[] bKey = Encoding.UTF8.GetBytes(Key); byte[] bIV = Encoding.UTF8.GetBytes(IV); byte[] byteArray = Encoding.UTF8.GetBytes(plainStr); string encrypt = null; Rijndael aes = Rijndael.Create(); try { using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write)) { cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); encrypt = Convert.ToBase64String(mStream.ToArray()); } } } catch { } aes.Clear(); return encrypt; } /// <summary> /// AES加密 /// </summary> /// <param name="plainStr">明文字符串</param> /// <param name="returnNull">加密失败时是否返回 null,false 返回 String.Empty</param> /// <returns>密文</returns> public static string AESEncrypt(string plainStr, bool returnNull) { string encrypt = AESEncrypt(plainStr); return returnNull ? encrypt : (encrypt == null ? String.Empty : encrypt); } /// <summary> /// AES解密 /// </summary> /// <param name="encryptStr">密文字符串</param> /// <returns>明文</returns> public static string AESDecrypt(string encryptStr) { byte[] bKey = Encoding.UTF8.GetBytes(Key); byte[] bIV = Encoding.UTF8.GetBytes(IV); byte[] byteArray = Convert.FromBase64String(encryptStr); string decrypt = null; Rijndael aes = Rijndael.Create(); try { using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write)) { cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); decrypt = Encoding.UTF8.GetString(mStream.ToArray()); } } } catch { } aes.Clear(); return decrypt; } /// <summary> /// AES解密 /// </summary> /// <param name="encryptStr">密文字符串</param> /// <param name="returnNull">解密失败时是否返回 null,false 返回 String.Empty</param> /// <returns>明文</returns> public static string AESDecrypt(string encryptStr, bool returnNull) { string decrypt = AESDecrypt(encryptStr); return returnNull ? decrypt : (decrypt == null ? String.Empty : decrypt); }
非对称加密.net的实现:
第一步:根据上面的原理性介绍,我们需要生成公钥(发信方需要)和私钥(收信方需要),实现代码如下://制造公钥和私钥的方法如下:RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();string publickey = crypt.ToXmlString(false);//公钥string privatekey = crypt.ToXmlString(true);//私钥crypt.Clear(); 第二步:发信方使用公钥对明文进行加密,实现代码如下:StreamReader sr = new StreamReader(Server.MapPath("a.txt"), UTF8Encoding.UTF8);string readpublickey = sr.ReadToEnd(); //包含 RSA 密钥信息的 XML 字符串。sr.Close();UTF8Encoding enc = new UTF8Encoding();byte[] bytes = enc.GetBytes(TextBox1.Text.Trim());RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();crypt.FromXmlString(readpublickey);bytes = crypt.Encrypt(bytes, false);string encryttext = Convert.ToBase64String(bytes);string abb = Server.UrlEncode(encryttext);Response.Write("密文为:" + abb); 第三步:收信方使用私钥对密文进行解密,实现代码如下:StreamReader sr = new StreamReader(Server.MapPath("b.txt"), UTF8Encoding.UTF8);string readprivatekey = sr.ReadToEnd();sr.Close();RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();UTF8Encoding enc = new UTF8Encoding();byte[] bytes = Convert.FromBase64String(@Server.UrlDecode(TextBox1.Text.Trim()));crypt.FromXmlString(readprivatekey);byte[] decryptbyte = crypt.Decrypt(bytes, false);string decrypttext = enc.GetString(decryptbyte);Response.Write("明文为:" + decrypttext);
简单实现:
系统对外的一些接口会显示一些数据,为了这些数据的安全,接口提供的数据进行AES加密,然后客户端接收后再进行解密操作。如果你还在使用DES加密赶快进行替换吧。
后续希望研究并运用:
1、DDOS的防护技巧
2、跨站点请求伪造
3、XSS攻击
4、文件上传漏洞
5、信息垃圾过滤
安全性之加密算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。