C#实现简单的字符串加密

作者:天方 时间:2022-12-28 17:09:29 

最近用到一些字符串加密,而.net中提供的加密算法中用起来比较复杂,便简单的封装了一下,方便日后使用。

public class Encrypt
   {
       static Encoding encoding = Encoding.UTF8;

public static string EncryptDES(string encryptString, string key)
       {
           var input = encoding.GetBytes(encryptString);
           var ouptputData = ProcessDES(input, key, true);
           var outputStr = Convert.ToBase64String(ouptputData);

//base64编码中有不能作为文件名的'/'符号,这里把它替换一下,增强适用范围
           return outputStr.Replace('/', '@');
       }

public static string DecryptDES(string decryptString, string key)
       {
           decryptString = decryptString.Replace('@', '/');

var input = Convert.FromBase64String(decryptString);
           var data = ProcessDES(input, key, false);
           return encoding.GetString(data);
       }

private static byte[] ProcessDES(byte[] data, string key, bool isEncrypt)
       {
           using (var dCSP = new DESCryptoServiceProvider())
           {
               var keyData = Md5(key);
               var rgbKey = new ArraySegment<byte>(keyData, 0, 8).ToArray();
               var rgbIV = new ArraySegment<byte>(keyData, 8, 8).ToArray();
               var dCSPKey = isEncrypt ? dCSP.CreateEncryptor(rgbKey, rgbIV) : dCSP.CreateDecryptor(rgbKey, rgbIV);

using (var memory = new MemoryStream())
               using (var cStream = new CryptoStream(memory, dCSPKey, CryptoStreamMode.Write))
               {
                   cStream.Write(data, 0, data.Length);
                   cStream.FlushFinalBlock();
                   return memory.ToArray();
               }
           }
       }

public static byte[] Md5(string str)
       {
           using (var md5 = MD5.Create())
           {
               return md5.ComputeHash(Encoding.UTF8.GetBytes(str));
           }
       }
   }

这个封装支持MD5和DES加密(有空再把RSA给补上),用于字符串加密,主要考虑的是方便使用,并没有追求最优效率。为方便使用做了如下两点优化:

  • 密钥为字符串形式,没有长度限制

  • 加密后输出的字符串为Base64的改造形式,可以用于文件名

来源:https://www.cnblogs.com/TianFang/p/3301941.html

标签:C#,字符串,加密
0
投稿

猜你喜欢

  • SpringBoot整合Mybatis实现CRUD

    2022-01-10 09:26:45
  • Springboot实现Shiro整合JWT的示例代码

    2022-01-30 02:58:32
  • Spring Boot 优雅整合多数据源

    2023-08-22 16:05:07
  • 详解SpringCloud Config配置中心

    2021-06-18 04:38:34
  • Android应用程序模型之应用程序,任务,进程,线程分析

    2021-10-09 02:17:45
  • Android开发实现popupWindow弹出窗口自定义布局与位置控制方法

    2022-10-13 11:42:09
  • C#实现类型的比较示例详解

    2022-02-18 18:17:44
  • Android中RecyclerView 滑动时图片加载的优化

    2021-07-29 09:58:12
  • Java 读写锁源码分析

    2021-08-31 01:48:54
  • Android中RecyclerView上拉下拉,分割线,多条目的实例代码

    2022-10-14 06:05:07
  • Java实现新建有返回值的线程的示例详解

    2022-02-13 17:09:33
  • android实现okHttp的get和post请求的简单封装与使用

    2023-10-06 04:20:25
  • Qt实现计算器功能

    2022-07-29 06:30:55
  • SpringMVC RESTFul实战案例访问首页

    2022-03-12 00:21:01
  • Android 关机弹出选择菜单的深入解析

    2023-03-19 20:56:09
  • Unity UGUI实现简单拖拽图片功能

    2022-11-26 19:55:03
  • Android实现仿iOS菊花加载圈动画效果

    2023-08-19 12:57:41
  • 解决FeignClient重试机制造成的接口幂等性

    2022-01-25 11:10:35
  • AjaxControlToolkit AjaxFileUpload 显示英文改成中文的解决方法

    2021-06-01 21:09:57
  • Java设计模式之java组合模式详解

    2022-05-02 07:52:38
  • asp之家 软件编程 m.aspxhome.com