Hi everyone,
sorry, is it possible to use CryptoStream class with Progress bar directly when Encrypt file ?
Because, when i loop using fileStream.Read to increment the value for Pogress bar and write the file it takes a time, especially when the file is more than 2 MB.
This is my code:
Speed encryption without using filestream but no progress bar, i don't know where to put the background work propriety.
public byte[] AES_Encrypt(byte[] fileContent, byte[] mtpass, string ifile)
{
byte[] salt_Bytes = new byte[] {10, 20, 30, 40, 50, 60, 70, 80};
RijndaelManaged AES = new RijndaelManaged();
AES.KeySize = 256;
AES.BlockSize = 128;
var key = new Rfc2898DeriveBytes(mtpass, salt_Bytes, 1000);
AES.Key = key.GetBytes(AES.KeySize / 8);
AES.IV = key.GetBytes(AES.BlockSize / 8);
AES.Mode = CipherMode.CBC;
AES.Padding = PaddingMode.Zeros;
//SPEED INCRYPTION WITHOUT PROGRESS BAR
MemoryStream mem = new MemoryStream();
CryptoStream fich_crypt_mem = new CryptoStream(mem, AES.CreateEncryptor(), CryptoStreamMode.Write);
//MAYBE HERE TO ADD THE CODE FOR CHANGE THE VALUE FOR PROGRESS BAR
fich_crypt_mem.Write(fileContent, 0, fileContent.Length);
fich_crypt_mem.Close();
return mem.ToArray();
}
The code: using fileStream and Progress bar work fine, but slow encryption:
public byte[] AES_Encrypt(byte[] fileContent, byte[] mtpass, string ifile)
{
//AES KEY GENERATE(SAME)
// PROGRESS BAR WORK BUT ENCRYPTION SLOW
MemoryStream mem = new MemoryStream();
CryptoStream fich_crypt_mem = new CryptoStream(mem, AES.CreateEncryptor(), CryptoStreamMode.Write);
// USING FileStream TO CHANGE THE VALUE OF PROGRESS BAR AND WRITE THE ENCRYPT FILE
FileStream fsIn = new FileStream(ifile, FileMode.Open);
int data;
double counter = 1;
while ((data = fsIn.ReadByte()) != -1) //Loop FileStream.Read
{
fich_crypt_mem.WriteByte((byte)data);
myBWorker.ReportProgress((int)((counter / fsIn.Length) * 100)); // progressbar using BackgroundWorker
counter++;
}
}
Thanks, and sorry for my English is not good.