C# 加密解密类

一. 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         /// <summary>
 5         /// MD5加密,和动网上的16/32位MD5加密结果相同,
 6         /// 使用的UTF8编码
 7         /// </summary>
 8         /// <param name="source">待加密字串</param>
 9         /// <param name="length">16或32值之一,其它则采用.net默认MD5加密算法</param>
10         /// <returns>加密后的字串</returns>
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 MD5
42 
43         #region MD5摘要
44         /// <summary>
45         /// 获取文件的MD5摘要
46         /// </summary>
47         /// <param name="fileName"></param>
48         /// <returns></returns>
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         /// <summary>
58         /// 根据stream获取文件摘要
59         /// </summary>
60         /// <param name="stream"></param>
61         /// <returns></returns>
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         #endregion
75     }
View Code

   二 . DES可逆对称加密

 1  /// <summary>
 2     /// DES AES Blowfish
 3     ///  对称加密算法的优点是速度快,
 4     ///  缺点是密钥管理不方便,要求共享密钥。
 5     /// 可逆对称加密  密钥长度8
 6     /// </summary>
 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         /// <summary>
13         /// DES 加密
14         /// </summary>
15         /// <param name="text">需要加密的值</param>
16         /// <returns>加密后的结果</returns>
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         /// <summary>
33         /// DES解密
34         /// </summary>
35         /// <param name="encryptText"></param>
36         /// <returns>解密后的结果</returns>
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 /// <summary>
 2     /// RSA ECC
 3     /// 可逆非对称加密 
 4     /// 非对称加密算法的优点是密钥管理很方便,缺点是速度慢。
 5     /// </summary>
 6     public class RsaEncrypt
 7     {
 8         /// <summary>
 9         /// 获取加密/解密对
10         /// 给你一个,是无法推算出另外一个的
11         /// 
12         /// Encrypt   Decrypt
13         /// </summary>
14         /// <returns>Encrypt   Decrypt</returns>
15         public static KeyValuePair<string, string> GetKeyPair()
16         {
17             RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
18             string publicKey = RSA.ToXmlString(false);
19             string privateKey = RSA.ToXmlString(true);
20             return new KeyValuePair<string, string>(publicKey, privateKey);
21         }
22 
23         /// <summary>
24         /// 加密:内容+加密key
25         /// </summary>
26         /// <param name="content"></param>
27         /// <param name="encryptKey">加密key</param>
28         /// <returns></returns>
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         /// <summary>
40         /// 解密  内容+解密key
41         /// </summary>
42         /// <param name="content"></param>
43         /// <param name="decryptKey">解密key</param>
44         /// <returns></returns>
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         /// <summary>
57         /// 可以合并在一起的,,每次产生一组新的密钥
58         /// </summary>
59         /// <param name="content"></param>
60         /// <param name="encryptKey">加密key</param>
61         /// <param name="decryptKey">解密key</param>
62         /// <returns>加密后结果</returns>
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请求solr服务器未响应,solr与tomcat整合

一、准备工作&#xff1a;我使用的是tomcat7.0,solr-4.8.1solr-4.8.1解压后是这样的。二、开始配置了1、首先要创建两个文件夹。home和server。我是创建在与solr-4.8.1同一根目录上的。D:\work-tool\server\solr\home和D:\work-tool\server\solr\server2、从solr-4.8.1\dist复制…

WeMos下实现小车避障与手机控制

参考&#xff1a;WeMos下实现小车避障与手机控制 作者&#xff1a;爱学习的小王呀 发布时间&#xff1a;2020-10-02 10:17:45 网址&#xff1a;https://blog.csdn.net/hongliwong/article/details/108900048?spm1001.2014.3001.5501 目录前言一、项目软硬件平台及开发环境1.硬…

苹果手机耗电快_iPhone12用5G耗电快,苹果回应

原标题&#xff1a;iPhone12用5G耗电快&#xff0c;苹果回应北京头条客户端10月24日消息&#xff0c;针对有媒体测试苹果iPhone12开启5G模式下&#xff0c;用电量提升的问题&#xff0c;苹果iPhone营销副总裁Kaiann Drance回应称&#xff0c;iPhone12 增加的智能数据模式可以平…

Ubuntu12 10下安装JDK7

为什么80%的码农都做不了架构师&#xff1f;>>> Ubuntu12 10版本下&#xff0c;不再预装JDK&#xff0c;包括OpenJdk&#xff0c;所以我们要从Oracle官网上下载java7的压缩包&#xff0c;选择适合自己电脑的安装包&#xff0c;我选的是jdk-7u9-linux-i586.tar.gz。…

neo4j python 算法_python操作neo4j简单实例

一&#xff1a;neo4j是什么neo4j:Neo4j是一个高性能的,NOSQL图形数据库,有关于更多neo4j的资料出门右拐二:python操作neo4j的实现python中neo4j的操作可以利用驱动包或者py2neo包&#xff0c;我采用py2neo第三方包实现以下简单功能&#xff0c;先建立一个neo4j的链接对于neo4j的…

尚硅谷的 ediary 笔记_干货分享 | 硅谷创新加速营第五讲教您合理规划融资需求 降低投资风险...

5月26日上午&#xff0c;康佳之星携手青岛蓝谷管理局、斯坦福青岛研究院、海尔海创汇联合举办的第二届硅谷创新加速营第五讲顺利完成。斯坦福青岛研究院董事长的Claude Leglise先生做客直播间&#xff0c;为现场创业者、企业家讲授创业之路必修课&#xff1a;企业财务规划。本讲…

虚拟机的服务器黑屏,VMware Workstation 14运行虚拟机黑屏解决办法

VMware Workstation 14运行虚拟机黑屏解决办法升级到VMware workstation 14 pro后所有虚拟系统全部黑屏&#xff0c;VMware 14 黑屏&#xff0c;VMware Workstation 14运行虚拟机黑屏是什么原因步骤如下&#xff0c;步骤如下&#xff0c;1、以管理员身份运行命令提示符(cmd.exe…

c++ 冒泡排序_干货|python笔记1-冒泡排序

面试的时候经常有面试官喜欢问如何进行冒泡排序&#xff1f;这个问题相信可以难倒一批的同学&#xff0c;本篇就详细讲解如何用python进行冒泡排序。基本原理01概念&#xff1a;冒泡排序是一种交换排序&#xff0c;它的基本思想是&#xff1a;两两比较相邻记录的关键字&#xf…

双链表嵌套的简单学生信息管理系统

参考&#xff1a;实现双链表嵌套的简单学生信息管理 作者&#xff1a;三速何时sub20 发布时间&#xff1a; 2020-07-20 10:44:40 网址&#xff1a;https://blog.csdn.net/weixin_44234294/article/details/107458155?spm1001.2014.3001.5501 参考&#xff1a;双链表嵌套实现简…

scrapy如何指定生成python3的项目_如何把阿里图标库的图标生成代码并应用于自己的项目...

有时候需要用很多图标去完成一定的页面效果和工作展现&#xff0c;框架内置的图标可能满足不了我们的需求&#xff0c;有个很好的图标库想必大家都知道-----就是阿里图标库。那么我们如何才能够把阿狸图标库的图标引用到自己的项目中呢&#xff1f;耐着性子往下看吧&#xff01…

win10系统无线服务器出错,win10系统中Wi-Fi证书错误的解决方法

wifi想必大家都很熟悉吧&#xff0c;这是很多用户们喜欢的无线网络&#xff0c;但是有时候会碰到一些wifi错误&#xff0c;比如有不少win10系统用户遇到wifi证书错误的情况&#xff0c;这样就会导致用户无法连接到网络或访问某个网站&#xff0c;该怎么处理呢&#xff0c;现在就…

subprocess模块

subprocess模块 subprocess可以根据命令的结果&#xff0c;正确的或者错误的分开存放 存放正确的结果 # import subprocess # objsubprocess.Popen(tasklist,shellTrue, # stdoutsubprocess.PIPE, # stderrsubprocess.PIPE, # …

通过EIGRP的 variance 参数实现非等价负载均衡

实验拓扑如上图所示我们使用EIGRP协议做通全网实现R1 的1.1.1.1 可以和 R4的4.4.4.4 进行通信 此时我们查看R1的路由表&#xff0c;查看去往4.4.4.4 的路由条目 通过拓扑图我们看到 R1去往4.4.4.4 是有两条路径的也就是 R1-R2-R4 和 R1-R3-R4 &#xff0c;但是在路由表中&…

echarts 获取点击的y轴数值_用 Python 自动获取NBA现役球员的职业生涯数据曲线

前言作为一个看了多年篮球的 NBA球迷&#xff0c;一直在想用 python 和篮球一起来写点什么加上最近在学习 pyecharts &#xff0c;所以就有了下面这篇文章&#xff1a;根据输入的球队和球员名字&#xff0c;自动生成该球员职业生涯数据曲线图&#xff01;✨ 效果火箭哈登勇士格…

重装系统后dns服务器未响应,dns服务器未响应,小编教你dns服务器未响应怎么解决...

连网时&#xff0c;出现连不上网络&#xff0c;用Windows网络诊断&#xff0c;诊断出的结果是“DNS服务器未响应”&#xff0c;遇到这样情况该怎样解决&#xff1f;在使用window系统的电脑上网过程中&#xff0c;常常会遇到DNS服务器未响应的问题&#xff0c;怎么办&#xff1f…

VMware虚拟机启动错误(正在被占用、内部错误)等问题

参考&#xff1a;VMware虚拟机启动错误&#xff08;正在被占用、内部错误&#xff09;等问题 作者&#xff1a;扫地僧- 发布时间&#xff1a;2019-09-20 15:02:55 网址&#xff1a;https://blog.csdn.net/weixin_42119153/article/details/101060183?spm1001.2014.3001.5501 目…

mt4 指标 涨跌幅 颜色k线_通达信指标公式源码阴线买股+黄金K线指标+源码

源码&#xff1a;TT2:DMA((((HIGH LOW) (CLOSE * 2)) / 4.15),0.9);TT1:REF(EMA(TT2,3),1);RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;K:SMA(RSV,3,1);D:SMA(K,3,1);J:3*K-2*D;LC:REF(CLOSE,1);RSI:((SMA(MAX((CLOSE - LC),0),3,1) / SMA(ABS((CLOSE - LC)),3,1)…

Windows Server 2008 R2 遗忘管理员密码后的解决方法-by iLync

思路是这样的&#xff1a;修改登录界面其他功能的链接&#xff0c;使之成为CMD的链接&#xff0c;在CMD命令里面定位到C:\\Windows\System32下&#xff0c;用net user 去修改账号和密码具体操作如下&#xff1a;一、使用Windows Server 2008 R2的安装光盘引导计算机启动。完成安…

面经——Linux相关

摘自&#xff1a;看完这些面试必问的Linux小知识&#xff0c;我保证你面试后会来给我的文章一键三连 作者&#xff1a;万里羊 发布时间&#xff1a;2021-04-09 21:55:23 网址&#xff1a;https://blog.csdn.net/weixin_44895651/article/details/115532107 作为一名以后想从事嵌…

android 权限动态申请

名字其实有点让人感觉高大上"权限动态申请",其实也没有什么, 以前做Android程序的时候,比如需要打开摄像头 那么需要在 然后就可以了, 但是Android6.0之后呢,有些权限必须手动让用户同意才可以,哪些权限需要用户手动同意,哪些不需要这里大家自行百度 现在说一下 直接…