概述
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);
和上面解密代码对比即可得知,很简单。
至于系统自带的文件夹和硬盘加密方法简单介绍,大家可参阅:http://zhidao.baidu.com/question/11126052.html?si=1
最后
以上就是动听大门为你收集整理的c# 如何实现文件与文件夹加密收藏的全部内容,希望文章能够帮你解决c# 如何实现文件与文件夹加密收藏所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复