C# 文件解密

对已经加密的私密文件进行解密

//选择解密文件

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值