void EncyrptAsyncBackgroundWorker(object sender, DoWorkEventArgs e)
        {
            DataForEnc data = (DataForEnc)e.Argument;

            byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
            string cryptFile = data.OutputFile;

            FileStream fsCrypt = new FileStream(cryptFile, FileMode.Append);

            RijndaelManaged AES = new RijndaelManaged();

            AES.KeySize   = data.KeySize;
            AES.BlockSize = data.BlockSize;

            var key = new Rfc2898DeriveBytes(data.AES_KeyBytes, saltBytes, 1000);

            AES.Key     = key.GetBytes(AES.KeySize / 8);
            AES.IV      = key.GetBytes(AES.BlockSize / 8);
            AES.Padding = PaddingMode.Zeros;

            AES.Mode = data.CipherMode != CipherMode.OFB ? data.CipherMode : CipherMode.CBC;

            CryptoStream cs = new CryptoStream(fsCrypt,
                                               AES.CreateEncryptor(),
                                               CryptoStreamMode.Write);

            FileStream fsIn = new FileStream(data.InputFile, FileMode.Open);

            int  encryptedData;
            long lenStream = fsIn.Length;

            sw.Start();

            int  prevVal = 0;
            long i       = 0;

            for (; (encryptedData = fsIn.ReadByte()) != -1; i++)
            {
                cs.WriteByte((byte)encryptedData);
                if (prevVal != unchecked ((int)(i * 100 / lenStream)))
                {
                    prevVal = unchecked ((int)(i * 100 / lenStream));
                    backgroundWorker.ReportProgress(prevVal);
                }
            }

            backgroundWorker.ReportProgress(100);


            fsIn.Close();
            cs.Close();
            fsCrypt.Close();
        }
        public void testEncryptionFile()
        {
            DataForEnc data = new DataForEnc();

            data.InputFile  = AES_Configuration.encInFile;
            data.OutputFile = AES_Configuration.encOutFile;
            data.CipherMode = AES_Configuration.cipherMode;
            data.KeySize    = 128;
            data.BlockSize  = 128;
            data.UsersCollection.Add("John", new UserData()
            {
                Name = "John", Passwd = Encoding.ASCII.GetBytes("asdf")
            });

            AES_AsyncEncryptionFile asyncEnc = new AES_AsyncEncryptionFile();

            asyncEnc.backgroundWorker.RunWorkerAsync(data);

            waitForEndBackgroundWorkder(asyncEnc);

            Assert.IsTrue(File.Exists(AES_Configuration.encOutFile));
        }