C#之文件简单加密

class Program
    {
        static string iv = "11111111";
        static string key = "22222222";

        /// <summary>
        /// 对文件内容进行DES加密
        /// </summary>
        /// <param name="sourceFile">待加密的文件绝对路径</param>
        /// <param name="destFile">加密后的文件保存的绝对路径</param>
        public static void EncryptFile(string sourceFile, string destFile)
        {
            //判断当前的文件是否存在
            if (!File.Exists(sourceFile)) 
                throw new FileNotFoundException("指定的文件路径不存在!", sourceFile);
            //将字符串中的所有字符编码为一个字节序列
            byte[] tmpKey = Encoding.Default.GetBytes(key);
            //将字符串中的所有字符编码为一个字节序列
            byte[] tmpIV = Encoding.Default.GetBytes(iv);
            //Crypto:加密 
            //DES:数据加密标准(data encryption standard)  将一些数据加密到内存,然后解密数据
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            //读取这个文件的所有内容 内容是字节
            byte[] btFile = File.ReadAllBytes(sourceFile);
            //文件流 使用指定的路径 创建模式和读/写权限初始化文件流的实例
            using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))
            {
                try
                {
                    //定义的加密流对象  CreateEncryptor:用指定的秘钥和初始化向量 创建对称数据加密标准加密对象
                    using (CryptoStream cs = new CryptoStream(fs, des.CreateEncryptor(tmpKey, tmpIV), CryptoStreamMode.Write))
                    {
                        cs.Write(btFile, 0, btFile.Length);
                        cs.FlushFinalBlock();
                    }
                }
                catch
                {
                    throw;
                }
                finally
                {
                    fs.Close();
                }
            }
        }
        /// <summary>
        /// 对文件内容进行DES加密,加密后覆盖掉原来的文件
        /// </summary>
        /// <param name="sourceFile">待加密的文件的绝对路径</param>
        static public void EncryptFile(string sourceFile)
        {
            EncryptFile(sourceFile, sourceFile);
        }

        /// <summary>
        /// 对文件内容进行DES解密
        /// </summary>
        /// <param name="sourceFile">待解密的文件绝对路径</param>
        /// <param name="destFile">解密后的文件保存的绝对路径</param>
        public static void DecryptFile(string sourceFile, string destFile)
        {
            //判断文件是否存在
            if (!File.Exists(sourceFile))
                throw new FileNotFoundException("指定的文件路径不存在!", sourceFile);

            byte[] btKey = Encoding.Default.GetBytes(key);
            byte[] btIV = Encoding.Default.GetBytes(iv);
            //将一些数据加密到内存,然后解密数据
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] btFile = File.ReadAllBytes(sourceFile);
          
            using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))
            {
                try
                {
                    //CreateDecryptor(tmpIV, tmpIV):用指定的秘钥btKey,和初始化向量
                    //CryptoStream:加密流 fs:目标数据流 
                    // 返回结果: 
                    //     对称 System.Security.Cryptography.DES 解密器对象。
                    using (CryptoStream cs = new CryptoStream(fs, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
                    {
                        cs.Write(btFile, 0, btFile.Length);
                        cs.FlushFinalBlock();
                    }
                }
                catch
                {
                    throw;
                }
                finally
                {
                    fs.Close();
                }
            }
        }

        /// <summary>
        /// 对文件内容进行DES解密,解密后覆盖掉原来的文件
        /// </summary>
        /// <param name="sourceFile">待解密的文件的绝对路径</param>
        public static void DecryptFile(string sourceFile)
        {
            DecryptFile(sourceFile, sourceFile);
        }

        
        
        static void Main(string[] args)
        {
            //可以得到当前默认的工程文件查找路径
            string path = AppDomain.CurrentDomain.BaseDirectory;
            //EncryptFile("aa.xml");
            DecryptFile("aa.xml");

            Console.ReadKey(); 
        }

你可能感兴趣的:(加密,C#,CryptoStream)