• DES的加密类(创建文件夹,隐藏文件夹)


    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!欢迎交流!
  • 相关阅读:
    Winform架构
    SQL2008多数据库查询表或删表
    hdu1114 PiggyBank
    hdu2844 Coins
    hdu2602 Bone Collector
    hdu2191 珍惜现在
    hdu1203 I NEED A OFFER!
    求推荐
    TransparentBlt
    双缓冲加载位图 WinCE
  • 原文地址:https://www.cnblogs.com/mahaisong/p/2208407.html
Copyright © 2020-2023  润新知