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),
);
和上面解密代码对比即可得知,很简单。


发布评论