我正在使用高级加密标准算法创建文件加密应用程序,但我发现我的应用程序速度太慢,尤其是在我加密大量数据时, 恩。文件大小80MB,30分钟。已经过去但我的应用程序尚未完成加密我的文件大小为80mb。
我在加密算法中使用ECB(电子代码簿)模式
如何加速我的应用程序加密大量数据?我做了一些研究,我找到了这个,http://en.wikipedia.org/wiki/Speedup,但我不确定这是否是我的问题的答案......或者如果我使用BackgroundWorker它是否有效?顺便说一句,我在开发项目时使用Visual Studio 2008。
这是加密文件的代码..
private void cmdEncrypt_Click(object sender, EventArgs e)
{
AESECB aes = new AESECB();
FileInfo fInfo = new FileInfo(txtFileSource.Text);
if (txtFileSource.Text == "")
{
MessageBox.Show("Please Select a File", "Message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (txtSecretKey.Text == "")
{
MessageBox.Show("Please Enter the password", "Message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (fInfo.Exists == false)
{
MessageBox.Show("File Not Found!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
byte[] bytePadding = aes.filePadding(txtFileSource.Text);
byte[] fByte = aes.getFileByte(txtFileSource.Text);
int farrLength = (bytePadding.Length + fByte.Length);
byte[] newFbyte = new byte[farrLength];
byte[] encryptedFByte = new byte[farrLength];
int counterBytePadding =0;
byte firstByte = 0;
for (int i = 0; i < farrLength; i++)
{
if (i < fByte.Length)
{
newFbyte[i] = fByte[i];
}
else
{
newFbyte[i] = bytePadding[counterBytePadding];
counterBytePadding++;
}
}
int plainFileBlock = newFbyte.Length / 16;
progressBar1.Maximum = plainFileBlock-1;
progressBar1.Visible = true;
int counter = 0;
int counter2 = 0;
for (int j = 0; j < plainFileBlock; j++)
{
byte[] encfbyte = aes.fileEncrypt(txtSecretKey.Text, newFbyte, counter);
for (int k = 0; k < 16; k++)
{
encryptedFByte[counter2] = encfbyte[k];
counter2++;
}
progressBar1.Value = j;
counter = counter + 16;
}
progressBar1.Visible = false;
int bytesToRead = encryptedFByte.Length;
string newPath = txtFileSource.Text + ".aesenc";
using (FileStream newFile = new FileStream(newPath, FileMode.Create, FileAccess.Write))
{
newFile.Write(encryptedFByte, 0, bytesToRead);
}
MessageBox.Show("Encryption Done!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
答案 0 :(得分:2)
所有优秀的程序员都会对你的代码充满信心。
这很简单,这样做:
using System.Diagnostics;
var startTime = DateTime.Now;
//some code here
Debug.WriteLine("This took {0}", DateTime.Now.Subtract(startTime));
然后在VS(View-&gt; Output)中查看输出窗口。
通过用这两行包裹方法的不同部分,您将识别出慢速位。
我怀疑是在循环中逐字节复制80MB。在这里试试Array.Resize
。
答案 1 :(得分:0)
正如韦斯顿所建议的那样,测量你的代码以确定什么是缓慢的。也就是说,它可能是循环的文件加密,这会减慢你的速度。如果是这样,你肯定可以通过使用超过1个CPU来加速这个过程。在C#中查找并行结构:“Parallel.For”。
这是一个简单的例子: http://www.dotnetcurry.com/ShowArticle.aspx?ID=608