2023年12月6日发(作者:)

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

引用中主要是添加了两个:using

graphy; using ;

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

using System;

using c;

using entModel;

using ;

using g;

using ;

using ;

using graphy;

using ;

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 (alog() == )

{

= me;

= "填写名称和后缀";

}

}

private void button2_Click(object sender, EventArgs e)

{

//文件加密

if ( == "")

{

//输入文件检测

("请选择加密文件!", "小侠提示您:",

, ation);

return;

}

if ( == "")

{

//输出文件检测

("请输入输出文件名!", "小侠提示您:",

, ation);

return;

}

if ( < 6 || !=

)

{

//输入密码检测 ("请输入正确密码!", "小侠提示您:",

, ation);

return;

}

//获得被加密文件名

string myInFileName = ;

//获得加密文件名

string myOutFileName = ;

//设定初始变量

byte[] myDESIV={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,};

byte[] myDESKey ={ };

//根据密码设置密钥大小

string myKeyString = ;

if ( == 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 ( == 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 ( >=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,

, );

FileStream myOutFileStream = new

FileStream(myOutFileName, Create,

);

gth(0);

//每次的中间流

byte[] inSertData = new byte[100];

//代表已经加密流的大小

int completedLength = 0;

//代表要加密文件总的大小

long inFileSize = ;

//创建DES对象

DES myDES = new DESCryptoServiceProvider();

//创建加密流

CryptoStream enCrytoStream = new

CryptoStream(myOutFileStream, Encryptor(myDESKey,

myDESIV), );

//从输入文件中读取流,然后加密到输出文件流

while (completedLength < inFileSize)

{

//每次写入加密文件的数据大小

int length = (inSertData, 0, 100);

(inSertData, 0, length);

completedLength += length;

} //关闭流

();

();

();

("文件加密操作成功!", "小侠提示您:",

, ation);

}

…………

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

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

//获得要解密的文件名

//获得要保存的文件名

//设定初始向量

//根据密码算出密钥

//创建输入和输出文件流

//每次的中间流

//代表已经加密流的大小

//代表要加密文件总的大小

//创建DES对象

//创建解密流 //从输入文件中读取流,然后解密到输出文件中

while (myCompletedSize < myFileSize)

{

//每次写入加密文件的数据大小

}

//关闭流

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

//创建DES对象

DES myDES = new DESCryptoServiceProvider();

//创建解密流

CryptoStream deCrytoStream = new

CryptoStream(myOutFileStream,

Decryptor(myDESKey, myDESIV),

);

和上面解密代码对比即可得知,很简单。