DES的加密类(创建文件夹,隐藏文件夹)
2011-10-12 11:51 沐海 阅读(1123) 评论(0) 编辑 收藏 举报using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Security.Cryptography; // Marshal.Free .. namespace enote902.Common { class DESEncrypt { private const string key = "888888"; private const string IV = "888888*"; /// <summary> /// 加密文件名(包含左右) /// </summary> /// <param name="caseId">案件号码</param> /// <param name="obj">问话对象</param> /// <param name="times">第几次</param> /// <returns>文件名加密(包含左右)</returns> public string[] Encryptor(string caseId, string obj, int times) { try { string temp = caseId + "//" + obj + "//" + times.ToString(); string DESName = Encrypt(temp); //找到当前路径。 string fileD = System.AppDomain.CurrentDomain.BaseDirectory + "Video\\";//debug文件下面 if (!Directory.Exists(fileD)) {//如果不存在就创建file文件夹 Directory.CreateDirectory(fileD);//创建该文件夹 } DirectoryInfo TheFolder = new DirectoryInfo(fileD);//公开用于创建、移动和枚举目录和子目录的实例方法。无法继承此类。 //判读是否是隐藏文件夹 if (TheFolder.Attributes.ToString().IndexOf("Hidden") == -1) { File.SetAttributes(fileD, FileAttributes.Hidden); } string onefile = DESName + "1.avi"; string twofile = DESName + "2.avi"; string onepath = fileD + DESName + "1.avi";//完整文件路径 string twopath = fileD + DESName + "2.avi";//完整文件路径 ////若存在文件。则修改对应的文件名称 //while (File.Exists(aa) || File.Exists(bb)) //{ //} if (!File.Exists(onepath) && !File.Exists(twopath))//检测的是文件全路径 { string[] result = { onefile, twofile };//存储的是文件名称 return result; } else { return null; } } catch { return null; throw new NotSupportedException("注意,当前文件无法保存!"); } } /// <summary> /// 得到文件名(包含左右) /// </summary> /// <param name="caseId">案件号码</param> /// <param name="obj">问话对象</param> /// <param name="times">第几次</param> /// <returns>文件名加密(包含左右)</returns> public string[] DEncryptor(string caseId, string obj, int times) { try { string temp = caseId + "//" + obj + "//" + times.ToString(); string DESName = Encrypt(temp); //找到当前路径。 string fileD = System.AppDomain.CurrentDomain.BaseDirectory ;//debug文件下面 string filePathA = fileD + DESName + "1.avi";//完整文件路径 string filePathB = fileD + DESName + "2.avi";//完整文件路径 if (File.Exists(filePathA) && File.Exists(filePathB)) { string[] result = { filePathA, filePathB }; return result; } else { return null; } } catch { return null; throw new NotSupportedException("未找到视频文件!"); } } /// <summary> /// 加密数据 /// </summary> /// <param name="encryptString">字符串数据</param> /// <returns>加密后数据</returns> private string Encrypt(string encryptString) { // 类将一些数据加密到内存,然后解密数据 //访问数据加密标准(DES)算法的加密服务提供程序 (CSP) 版本的包装对象 DESCryptoServiceProvider des = new DESCryptoServiceProvider(); des.Key = ASCIIEncoding.ASCII.GetBytes(key);//获取或设置对称算法的密钥。 //密钥既用于加密,也用于解密。为了保证对称算法成功,必须只有发送方和接收方知道密钥。有效密钥大小由对称算法的具体实现指定,并且在 LegalKeySizes 属性中列出。 //如果此属性在使用时为 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing),则调用 GenerateKey 方法以创建新的随机值。 des.IV = ASCIIEncoding.ASCII.GetBytes(IV); //从 SymmetricAlgorithm 类派生的类使用一种称为密码块链接 (CBC) 的链接模式,该链接模式需要密钥和初始化向量才能执行数据的加密转换。 若要解密使用其中一个 SymmetricAlgorithm 类加密的数据,必须将 Key 属性和 IV 属性设置为用于加密的相同值。 byte[] inputByteArray = Encoding.Default.GetBytes(encryptString);//把字符串放到byte数组中 MemoryStream ms = new MemoryStream();//创建其支持存储区为内存的流。 //MemoryStream 封装以无符号字节数组形式存储的数据,该数组在创建 MemoryStream 对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。 //定义将数据流链接到加密转换的流。 //公共语言运行库使用面向流的设计进行加密。该设计的核心是 CryptoStream。实现 CryptoStream 的任何加密对象可以和实现 Stream 的任何对象链接起来,因此一个对象的流式处理输出可以馈送到另一个对象的输入。不需要分别存储中间结果(第一个对象的输出)。 try { CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); //对其执行加密转换的流。要对流执行的加密转换。指定加密流的模式。 cs.Write(inputByteArray, 0, inputByteArray.Length); //将一个字节序列写入当前 CryptoStream,并将流中的当前位置提升写入的字节数。 (重写 Stream..::.Write(array<Byte>[]()[], Int32, Int32)。) cs.FlushFinalBlock();//用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区。 } catch { } StringBuilder ret = new StringBuilder(); foreach (byte b in ms.ToArray()) { ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.ToString(); } /// <summary> /// 解密 /// </summary> /// <param name="DencryptString">解密字符串</param> /// <returns>明文</returns> public string Decrypt(string DencryptString) { if (String.IsNullOrEmpty(DencryptString)) { throw new ArgumentNullException("解密元数据不能为空!"); } DESCryptoServiceProvider des = new DESCryptoServiceProvider(); des.Key = ASCIIEncoding.ASCII.GetBytes(key);//获取或设置对称算法的密钥。 //密钥既用于加密,也用于解密。为了保证对称算法成功,必须只有发送方和接收方知道密钥。有效密钥大小由对称算法的具体实现指定,并且在 LegalKeySizes 属性中列出。 //如果此属性在使用时为 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing),则调用 GenerateKey 方法以创建新的随机值。 des.IV = ASCIIEncoding.ASCII.GetBytes(IV); MemoryStream memoryStream = new MemoryStream(Convert.FromBase64String(DencryptString)); CryptoStream cryptoStream = new CryptoStream(memoryStream, des.CreateEncryptor(), CryptoStreamMode.Read); StreamReader reader = new StreamReader(cryptoStream); return reader.ReadToEnd(); } } }
本人声明:
个人主页:沐海(http://www.cnblogs.com/mahaisong)
以上文章都是经过本人设计实践和阅读其他文档得出。如果需要探讨或指教可以留言或加我QQ!欢迎交流!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述