des文件加密

来源:互联网 发布:程序员软件 编辑:程序博客网 时间:2024/05/07 10:29

DES 文件加密

 (2012-12-26 15:32:30)
标签: 

杂谈

  

c#加密文件只可以对文件本身加密,却不能对文件夹加密,经查询得知:是系统限制了,不知道真假,大家可在查询,把结果告诉大家共享。其实系统已经集成了对文件夹和硬盘的加密的功能。下面是对单个文件的加密代码:

 引用中主要是添加了两个:using System.Security.Cryptography;     using System.IO;

源码(带有详细的注释):

       using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.IO;

namespace xiaoxia
{
    public partial class FileJiami Form
    {
        public FileJiami()
        {
            InitializeComponent();
        }

        private void FileJiami_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //文件浏览
            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                this.txtFileIn.Text this.openFileDialog1.FileName;
                this.txtFileOut.Text "填写名称和后缀";
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //文件加密
            if (this.txtFileIn.Text == "")
            {
                //输入文件检测
                MessageBox.Show("请选择加密文件!", "小侠提示您:", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (this.txtFileOut.Text == "")
            {
                //输出文件检测
                MessageBox.Show("请输入输出文件名!", "小侠提示您:", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (this.txtMima1.Text.Length || this.txtMima2.Text != this.txtMima1.Text)
            {
                //输入密码检测
                MessageBox.Show("请输入正确密码!", "小侠提示您:", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            //获得被加密文件名
            string myInFileName this.txtFileIn.Text;
           
            //获得加密文件名
            string myOutFileName this.txtFileOut.Text;
            //设定初始变量
            byte[] myDESIV={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,};
            byte[] myDESKey ={ };
            //根据密码设置密钥大小
            string myKeyString this.txtMima1.Text;
            if (myKeyString.Length == 6)
            {
                myDESKey new byte[] (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], 0x07, 0x08 };

            }
            if (myKeyString.Length == 7)
            {
                myDESKey new byte[] (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], 0x07};

            }
            if (myKeyString.Length >=8)
            {
                myDESKey new byte[] (byte)myKeyString[0], (byte)myKeyString[1], (byte)myKeyString[2], (byte)myKeyString[3], (byte)myKeyString[4], (byte)myKeyString[5], (byte)myKeyString[6], (byte)myKeyString[7] };

            }
            //创建输入和输出文件流
            FileStream myInFileStream new FileStream(myInFileName, FileMode.Open, FileAccess.Read);
            FileStream myOutFileStream new FileStream(myOutFileName, FileMode.OpenOrCreate, FileAccess.Write);
            myOutFileStream.SetLength(0);
            //每次的中间流
            byte[] inSertData new byte[100];
            //代表已经加密流的大小
            int completedLength 0;
            //代表要加密文件总的大小
            long inFileSize myInFileStream.Length;
            //创建DES对象
            DES myDES new DESCryptoServiceProvider();
            //创建加密流
            CryptoStream enCrytoStream new CryptoStream(myOutFileStream, myDES.CreateEncryptor(myDESKey, myDESIV), CryptoStreamMode.Write);
            //从输入文件中读取流,然后加密到输出文件流
            while (completedLength inFileSize)
            {
                //每次写入加密文件的数据大小
                int length myInFileStream.Read(inSertData, 0, 100);
                enCrytoStream.Write(inSertData, 0, length);
                completedLength += length;
            }
            //关闭流
            enCrytoStream.Close();
            myInFileStream.Close();
            myOutFileStream.Close();
            MessageBox.Show("文件加密操作成功!", "小侠提示您:", MessageBoxButtons.OK, MessageBoxIcon.Information);
            

        }

      …………

      上面是加密的代码,解密的代码几乎和上面完全一样,步骤思路完全一样。看下面,可对比上面:

主要是在try()里面有以下实现,其他代码相同,略:

       //获得要解密的文件名
        //获得要保存的文件名
        //设定初始向量
        //根据密码算出密钥
        //创建输入和输出文件流
        //每次的中间流
        //代表已经加密流的大小
        //代表要加密文件总的大小
        //创建DES对象
         //创建解密流
         //从输入文件中读取流,然后解密到输出文件中
                 while (myCompletedSize myFileSize)
                {
                       //每次写入加密文件的数据大小
                 }
                //关闭流

     这里和加密的区别之处在于创建DES对象和创建解密流上,这里应该是:

      //创建DES对象
                DES myDES new DESCryptoServiceProvider();
                //创建解密流
                  CryptoStream deCrytoStream new CryptoStream(myOutFileStream, myDES.CreateDecryptor(myDESKey, myDESIV), CryptoStreamMode.Write);

1 0
原创粉丝点击