C#怎么加密文件和文件夹,或者给文件加锁。
现在我只能给txt文件加密,但是其他文件不会加密,另一个想法是给要加密的文件加锁,每次打开该加锁的文件是先要输入口令,请问高手应该怎么实现?(主要想知道怎么给文件和文件夹加锁,实在不行再直接对文件加密)给个大体思路就行。
现在我只能给txt文件加密,但是其他文件不会加密,另一个想法是给要加密的文件加锁,每次打开该加锁的文件是先要输入口令,请问高手应该怎么实现?(主要想知道怎么给文件和文件夹加锁,实在不行再直接对文件加密)给个大体思路就行。
调试欢乐多
http://blog.csdn.net/loundar/archive/2008/10/24/3138058.aspx
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);
http://download.csdn.net/user/sageking2/DES文件加解密源码
其实就一个FileSystemWatcher控件对象 其事件能实现对文件的监视
Path属性获取或设置要监视目录的路径
this.fileSystemWatcher1.Path=this.textBox1.text;
这样就监视了这个目录
在它的公共事件中就可以监视你想监视的动作了
private void fileSystemWatcher1_Created(object sender,System.IO.FileSystemEventArgs e)
{
this.richTextBox1.text+=e.FullPath.ToString()+"新增";
}