博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 加密解密类
阅读量:4310 次
发布时间:2019-06-06

本文共 7410 字,大约阅读时间需要 24 分钟。

一. MD5

  1 防止看到明文 数据库密码,加盐(原密码+固定字符串,然后再MD5/双MD5)
  2 防篡改
  3 急速秒传(第一次上传文件,保存md5摘要,第二次上传检查md5摘要)
  4文件下载(防篡改,官方发布的时候给一个md5摘要,安装的时候首先检查下摘要)
  5 svn TFS git VSS(本地保存文件的md5摘要,任何修改都会影响md5)

 

1 public class MD5Encrypt 2     { 3         #region MD5 4         ///  5         /// MD5加密,和动网上的16/32位MD5加密结果相同, 6         /// 使用的UTF8编码 7         ///  8         /// 待加密字串 9         /// 16或32值之一,其它则采用.net默认MD5加密算法10         /// 
加密后的字串
11 public static string Encrypt(string source, int length = 32)//默认参数12 {13 if (string.IsNullOrEmpty(source)) return string.Empty;14 HashAlgorithm provider = CryptoConfig.CreateFromName("MD5") as HashAlgorithm;15 byte[] bytes = Encoding.UTF8.GetBytes(source);//这里需要区别编码的16 byte[] hashValue = provider.ComputeHash(bytes);17 StringBuilder sb = new StringBuilder();18 switch (length)19 {20 case 16://16位密文是32位密文的9到24位字符21 for (int i = 4; i < 12; i++)22 {23 sb.Append(hashValue[i].ToString("x2"));24 }25 break;26 case 32:27 for (int i = 0; i < 16; i++)28 {29 sb.Append(hashValue[i].ToString("x2"));30 }31 break;32 default:33 for (int i = 0; i < hashValue.Length; i++)34 {35 sb.Append(hashValue[i].ToString("x2"));36 }37 break;38 }39 return sb.ToString();40 }41 #endregion MD542 43 #region MD5摘要44 /// 45 /// 获取文件的MD5摘要46 /// 47 /// 48 ///
49 public static string AbstractFile(string fileName)50 {51 using (FileStream file = new FileStream(fileName, FileMode.Open))52 {53 return AbstractFile(file);54 }55 }56 57 /// 58 /// 根据stream获取文件摘要59 /// 60 /// 61 ///
62 public static string AbstractFile(Stream stream)63 {64 MD5 md5 = new MD5CryptoServiceProvider();65 byte[] retVal = md5.ComputeHash(stream);66 67 StringBuilder sb = new StringBuilder();68 for (int i = 0; i < retVal.Length; i++)69 {70 sb.Append(retVal[i].ToString("x2"));71 }72 return sb.ToString();73 }74 #endregion75 }
View Code

   二 . DES可逆对称加密

1  ///  2     /// DES AES Blowfish 3     ///  对称加密算法的优点是速度快, 4     ///  缺点是密钥管理不方便,要求共享密钥。 5     /// 可逆对称加密  密钥长度8 6     ///  7     public class DesEncrypt 8     { 9         private static byte[] _rgbKey = ASCIIEncoding.ASCII.GetBytes("key"));10         private static byte[] _rgbIV = ASCIIEncoding.ASCII.GetBytes("value");11 12         /// 13         /// DES 加密14         /// 15         /// 需要加密的值16         /// 
加密后的结果
17 public static string Encrypt(string text)18 {19 DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();20 using (MemoryStream memStream = new MemoryStream())21 {22 CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateEncryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write);23 StreamWriter sWriter = new StreamWriter(crypStream);24 sWriter.Write(text);25 sWriter.Flush();26 crypStream.FlushFinalBlock();27 memStream.Flush();28 return Convert.ToBase64String(memStream.GetBuffer(), 0, (int)memStream.Length);29 }30 }31 32 /// 33 /// DES解密34 /// 35 /// 36 ///
解密后的结果
37 public static string Decrypt(string encryptText)38 {39 DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();40 byte[] buffer = Convert.FromBase64String(encryptText);41 42 using (MemoryStream memStream = new MemoryStream())43 {44 CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateDecryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write);45 crypStream.Write(buffer, 0, buffer.Length);46 crypStream.FlushFinalBlock();47 return ASCIIEncoding.UTF8.GetString(memStream.ToArray());48 }49 }50 }
View Code

  三 RSA可逆非对称加密

1 ///  2     /// RSA ECC 3     /// 可逆非对称加密  4     /// 非对称加密算法的优点是密钥管理很方便,缺点是速度慢。 5     ///  6     public class RsaEncrypt 7     { 8         ///  9         /// 获取加密/解密对10         /// 给你一个,是无法推算出另外一个的11         /// 12         /// Encrypt   Decrypt13         /// 14         /// 
Encrypt Decrypt
15 public static KeyValuePair
GetKeyPair()16 {17 RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();18 string publicKey = RSA.ToXmlString(false);19 string privateKey = RSA.ToXmlString(true);20 return new KeyValuePair
(publicKey, privateKey);21 }22 23 ///
24 /// 加密:内容+加密key25 /// 26 ///
27 ///
加密key28 ///
29 public static string Encrypt(string content, string encryptKey)30 {31 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();32 rsa.FromXmlString(encryptKey);33 UnicodeEncoding ByteConverter = new UnicodeEncoding();34 byte[] DataToEncrypt = ByteConverter.GetBytes(content);35 byte[] resultBytes = rsa.Encrypt(DataToEncrypt, false);36 return Convert.ToBase64String(resultBytes);37 }38 39 ///
40 /// 解密 内容+解密key41 /// 42 ///
43 ///
解密key44 ///
45 public static string Decrypt(string content, string decryptKey)46 {47 byte[] dataToDecrypt = Convert.FromBase64String(content);48 RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();49 RSA.FromXmlString(decryptKey);50 byte[] resultBytes = RSA.Decrypt(dataToDecrypt, false);51 UnicodeEncoding ByteConverter = new UnicodeEncoding();52 return ByteConverter.GetString(resultBytes);53 }54 55 56 ///
57 /// 可以合并在一起的,,每次产生一组新的密钥58 /// 59 ///
60 ///
加密key61 ///
解密key62 ///
加密后结果
63 private static string Encrypt(string content, out string publicKey, out string privateKey)64 {65 RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();66 publicKey = rsaProvider.ToXmlString(false);67 privateKey = rsaProvider.ToXmlString(true);68 69 UnicodeEncoding ByteConverter = new UnicodeEncoding();70 byte[] DataToEncrypt = ByteConverter.GetBytes(content);71 byte[] resultBytes = rsaProvider.Encrypt(DataToEncrypt, false);72 return Convert.ToBase64String(resultBytes);73 }
View Code

 

   

转载于:https://www.cnblogs.com/saodiseng2015/p/9296639.html

你可能感兴趣的文章
P1163 第K极值 - Smart Online Judge
查看>>
Unity3D 新版本场景转换
查看>>
Android--获取App应用程序的大小
查看>>
Java Timer触发定时器
查看>>
Page Object设计模式
查看>>
程序的基础知识
查看>>
linux中的软连接和硬连接
查看>>
DFS专题 Prime Ring Problem
查看>>
jQuery源码解析 事件
查看>>
数字格式化NumberFormat
查看>>
ajax例子
查看>>
漫画阅读器ComicReader应用源码
查看>>
html中引入调用另一个html文件
查看>>
旧代码中的"enum hack"
查看>>
如何禁止某个linux用户访问某些文件夹及执行某些命令
查看>>
javascript学习之: 前端模块化
查看>>
A. Ice Skating (联通块)
查看>>
拦截器与过滤器的不同点
查看>>
pwnable.kr之passcode
查看>>
python类的继承、封装和多态
查看>>