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