C#文件加解密

来源:互联网 发布:网络常用端口号大全 编辑:程序博客网 时间:2024/03/28 19:49
        #region 加密文件        /// <summary>        /// 加密文件函数        /// </summary>        /// <param name="myInFileName">需要加密的文件地址</param>        /// <param name="myOutFileName">加密后的文件地址与名称</param>        /// <param name="myKeyString">密钥</param>        public static void EncryptedFiles(string myInFileName, string myOutFileName, string myKeyString)        {            try            {                //设定初始变量                byte[] myDESIV ={ 0x41, 0x72, 0x65, 0x79, 0x6F, 0x75, 0x6D, 0x79, 0x53, 0x6E, 0x6F, 0x77, 0x6D, 0x61, 0x6E, 0x3F };                byte[] myDESKey ={ };                switch (myKeyString.Length)                {                    case 8:                        myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7] };                        break;                    case 9:                        myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8] };                        break;                    case 10:                        myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9] };                        break;                    case 11:                        myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10] };                        break;                    case 12:                        myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11] };                        break;                    case 13:                        myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12] };                        break;                    case 14:                        myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13] };                        break;                    case 15:                        myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14] };                        break;                    case 16:                        myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14], (byte)myKeyString[15] };                        break;                    default:                        if (myKeyString.Length > 8 && myKeyString.Length < 16)                        {                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7] };                        }                        else                        {                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14], (byte)myKeyString[15] };                        }                        break;                }                //创建输入和输出文件流                FileStream myInFileStream = new FileStream(myInFileName, FileMode.Open, FileAccess.Read);                FileStream myOutFileStream = new FileStream(myOutFileName, FileMode.OpenOrCreate, FileAccess.Write);                myOutFileStream.SetLength(0);                //每次的中间流                byte[] inSertData = new byte[100];                //代表已经加密流的大小                int completedLength = 0;                //代表要加密文件总的大小                long inFileSize = myInFileStream.Length;                //创建RijndaelManaged加密对象                RijndaelManaged myRijndael = new RijndaelManaged();                //创建加密流                CryptoStream enCrytoStream = new CryptoStream(myOutFileStream, myRijndael.CreateEncryptor(myDESKey, myDESIV), CryptoStreamMode.Write);                //从输入文件中读取流,然后加密到输出文件流                while (completedLength < inFileSize)                {                    //每次写入加密文件的数据大小                    int length = myInFileStream.Read(inSertData, 0, 100);                    enCrytoStream.Write(inSertData, 0, length);                    completedLength += length;                }                //关闭流                try                {                    enCrytoStream.Close();                    myInFileStream.Close();                    myOutFileStream.Close();                }                catch (Exception)                {                    myInFileStream.Close();                    myOutFileStream.Close();                }                FileInfo fi = new FileInfo(myInFileName);                fi.Delete();//删除临时文件            }            catch (Exception ex)            {                WriteLogFile("加密文件:" + ex.ToString());            }        }        #endregion        #region 解密文件        /// <summary>        /// 解密文件函数        /// </summary>        /// <param name="filepath">解压文件夹地址</param>        /// <param name="myInFileName">需要解密的文件地址</param>        /// <param name="myOutFileName">解密后的文件地址与名称</param>        /// <param name="myKeyString">密钥</param>        public static bool DecryptFiles(string filepath, string myKeyString)        {            try            {                DirectoryInfo TheFolder = new DirectoryInfo(filepath);                foreach (FileInfo NextFolder in TheFolder.GetFiles())                {                    //文件夹路径                    string Path = NextFolder.DirectoryName;                    //获得被加密文件名                    string myInFileName = NextFolder.FullName;                    //获得加密文件名                    string myOutFileName = "temp" + NextFolder.Name;                    //设定初始变量                    byte[] myDESIV ={ 0x41, 0x72, 0x65, 0x79, 0x6F, 0x75, 0x6D, 0x79, 0x53, 0x6E, 0x6F, 0x77, 0x6D, 0x61, 0x6E, 0x3F };                    byte[] myDESKey ={ };                    switch (myKeyString.Length)                    {                        case 8:                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7] };                            break;                        case 9:                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8] };                            break;                        case 10:                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9] };                            break;                        case 11:                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10] };                            break;                        case 12:                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11] };                            break;                        case 13:                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12] };                            break;                        case 14:                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13] };                            break;                        case 15:                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14] };                            break;                        case 16:                            myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14], (byte)myKeyString[15] };                            break;                        default:                            if (myKeyString.Length > 8 && myKeyString.Length < 16)                            {                                myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7] };                            }                            else                            {                                myDESKey = new byte[] { (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14], (byte)myKeyString[15] };                            }                            break;                    }                    //创建输入和输出文件流                    FileStream myInFileStream = new FileStream(myInFileName, FileMode.Open, FileAccess.Read);                    FileStream myOutFileStream = new FileStream(Path + "\\" + myOutFileName, FileMode.OpenOrCreate, FileAccess.Write);                    myOutFileStream.SetLength(0);                    //每次的中间流                    byte[] inSertData = new byte[100];                    //代表已经加密流的大小                    int completedLength = 0;                    //代表要加密文件总的大小                    long inFileSize = myInFileStream.Length;                    //创建RijndaelManaged加密对象                    RijndaelManaged myRijndael = new RijndaelManaged();                    //创建加密流                    CryptoStream enCrytoStream = new CryptoStream(myOutFileStream, myRijndael.CreateDecryptor(myDESKey, myDESIV), CryptoStreamMode.Write);                    //从输入文件中读取流,然后加密到输出文件流                    while (completedLength < inFileSize)                    {                        //每次写入加密文件的数据大小                        int length = myInFileStream.Read(inSertData, 0, 100);                        enCrytoStream.Write(inSertData, 0, length);                        completedLength += length;                    }                    //关闭流                    try                    {                        enCrytoStream.Close();                        myInFileStream.Close();                        myOutFileStream.Close();                    }                    catch (Exception)                    {                        myInFileStream.Close();                        myOutFileStream.Close();                        return false;                    }                    FileInfo fi = new FileInfo(myInFileName);                    fi.Delete();//将未解迷原文件删除                    FileInfo fiOut = new FileInfo(Path + "\\" + myOutFileName);                    fiOut.MoveTo(myInFileName);//将已解密的文件重命名成原未解密的文件名                }                return true;            }            catch (Exception)            {                return false;            }        }        #endregion

0 0
原创粉丝点击