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)); }