C#怎么加密文件和文件夹,或者给文件加锁。
现在我只能给txt文件加密,但是其他文件不会加密,另一个想法是给要加密的文件加锁,每次打开该加锁的文件是先要输入口令,请问高手应该怎么实现?(主要想知道怎么给文件和文件夹加锁,实在不行再直接对文件加密)给个大体思路就行。

解决方案 »

  1.   

    参考
    http://blog.csdn.net/loundar/archive/2008/10/24/3138058.aspx
      

  2.   

    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 < 6 || 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);
      

  3.   

    简单思路:把要加密的文件或者文件夹压缩成带密码的zip.就可以了。这是最简单的做法.
      

  4.   

    要在打开文件时弹出解密对话框,必然要在关联文件存在且处于监控状态,也最好自己发明一种格式.对文件内容加密的话用2楼的,或者
    http://download.csdn.net/user/sageking2/DES文件加解密源码
      

  5.   

    C#中有个类可以对文件,文件目录进行监视,比如监视删除,编辑等等;还有个方法就是用C++写个DLL,在这个DLL里面把打开,删除文件等等的API给HOOK掉!
      

  6.   


    其实就一个FileSystemWatcher控件对象 其事件能实现对文件的监视
    Path属性获取或设置要监视目录的路径
    this.fileSystemWatcher1.Path=this.textBox1.text;
    这样就监视了这个目录
    在它的公共事件中就可以监视你想监视的动作了
    private void fileSystemWatcher1_Created(object sender,System.IO.FileSystemEventArgs e)
    {
      this.richTextBox1.text+=e.FullPath.ToString()+"新增";
    }