对已经加密的私密文件进行解密
//选择解密文件
private void button1_Click(object sender, EventArgs e){
if (openFileDialog1.ShowDialog() == DialogResult.OK){
textBox1.Text = openFileDialog1.FileName;
FileInfo FInfo = new FileInfo(textBox1.Text);
if (FInfo.Extension.ToLower() == ".mr"){
button2.Enabled = false;
button3.Enabled = true; }else{
button2.Enabled = true;
button3.Enabled = false;}}}
//解密
private void button3_Click(object sender, EventArgs e){if (textBox1.Text != ""){
if (textBox2.Text.Length < 6)
MessageBox.Show("密码不能小于6位!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
else{
EDncrypt myEDncrypt = new EDncrypt(textBox1.Text, textBox2.Text, progressBar1);
myEDncrypt.StartDncrypt();progressBar1.Value = 0;}}}
#region 定义全局变量及类对象
private string strFile = "";
private string strNewFile = "";
private string strPwd = "";
private ProgressBar PBar = null;
private Thread EThread = null;
private Thread DThread = null;
#endregion
//文件解密
private void myDThread(){
FileStream FStream = null; FileStream NewFStream = null;
CryptoStream CStream = null;
try{
try{
byte[] btRKey = new byte[0];
if (strPwd.Length == 6) {
btRKey = new byte[] { (byte)strPwd[0], (byte)strPwd[1], (byte)strPwd[2], (byte)strPwd[3], (byte)strPwd[4],
(byte)strPwd[5], (byte)strPwd[0], (byte)strPwd[1] };}
if (strPwd.Length == 7) {
btRKey = new byte[] { (byte)strPwd[0], (byte)strPwd[1], (byte)strPwd[2], (byte)strPwd[3], (byte)strPwd[4],
(byte)strPwd[5], (byte)strPwd[6], (byte)strPwd[0] };
}if (strPwd.Length >= 8)
{btRKey = new byte[] { (byte)strPwd[0], (byte)strPwd[1], (byte)strPwd[2], (byte)strPwd[3], (byte)strPwd[4], (byte)strPwd[5], (byte)strPwd[6], (byte)strPwd[7] };}
FStream = new FileStream(strFile, FileMode.Open, FileAccess.Read);
strNewFile = strFile.Substring(0, strFile.Length - 3);
NewFStream = new FileStream(strNewFile, FileMode.OpenOrCreate, FileAccess.Write);
NewFStream.SetLength((long)0);
byte[] buffer = new byte[0x400]; int MinNum = 0;
long length = FStream.Length; PBar.Maximum = MaxNum;
int MaxNum = (int)(length / ((long)0x400));
DES myDES = new DESCryptoServiceProvider();
CStream = new CryptoStream(NewFStream, myDES.CreateDecryptor(btRKey, btRKey), CryptoStreamMode.Write);
while (MinNum < length)
{int count = FStream.Read(buffer, 0, 0x400);
CStream.Write(buffer, 0, count);
MinNum += count;
try{
if (PBar.Value < PBar.Maximum)
{ PBar.Value++;}}
catch{}}
MessageBox.Show("文件解密成功!", "信息提示", MessageBoxButtons.OK,
}
catch
{
MessageBox.Show("文件解密失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
finally{CStream.Close();FStream.Close();NewFStream.Close();} }
//运行解密线程
public void StartDncrypt()
{ DThread.Start();}