#region 加密文件
/// <summary>
/// 加密文件函数
/// </summary>
/// <param name="myInFileName">需要加密的文件地址</param>
/// <param name="myOutFileName">加密后的文件地址与名称</param>
/// <param name="myKeyString">密钥</param>
public static void EncryptedFiles(string myInFileName, string myOutFileName, string myKeyString)
{
try
{
//设定初始变量
byte[] myDESIV ={ 0x41, 0x72, 0x65, 0x79, 0x6F, 0x75, 0x6D, 0x79, 0x53, 0x6E, 0x6F, 0x77, 0x6D, 0x61, 0x6E, 0x3F };
byte[] myDESKey ={ };
switch (myKeyString.Length)
{
case 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] };
break;
case 9:
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], (byte)myKeyString[8] };
break;
case 10:
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], (byte)myKeyString[8], (byte)myKeyString[9] };
break;
case 11:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10] };
break;
case 12:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11] };
break;
case 13:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12] };
break;
case 14:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13] };
break;
case 15:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14] };
break;
case 16:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14], (byte)myKeyString[15] };
break;
default:
if (myKeyString.Length > 8 && myKeyString.Length < 16)
{
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] };
}
else
{
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14], (byte)myKeyString[15] };
}
break;
}
//创建输入和输出文件流
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;
//创建RijndaelManaged加密对象
RijndaelManaged myRijndael = new RijndaelManaged();
//创建加密流
CryptoStream enCrytoStream = new CryptoStream(myOutFileStream, myRijndael.CreateEncryptor(myDESKey, myDESIV), CryptoStreamMode.Write);
//从输入文件中读取流,然后加密到输出文件流
while (completedLength < inFileSize)
{
//每次写入加密文件的数据大小
int length = myInFileStream.Read(inSertData, 0, 100);
enCrytoStream.Write(inSertData, 0, length);
completedLength += length;
}
//关闭流
try
{
enCrytoStream.Close();
myInFileStream.Close();
myOutFileStream.Close();
}
catch (Exception)
{
myInFileStream.Close();
myOutFileStream.Close();
}
FileInfo fi = new FileInfo(myInFileName);
fi.Delete();//删除临时文件
}
catch (Exception ex)
{
WriteLogFile("加密文件:" + ex.ToString());
}
}
#endregion
#region 解密文件
/// <summary>
/// 解密文件函数
/// </summary>
/// <param name="filepath">解压文件夹地址</param>
/// <param name="myInFileName">需要解密的文件地址</param>
/// <param name="myOutFileName">解密后的文件地址与名称</param>
/// <param name="myKeyString">密钥</param>
public static bool DecryptFiles(string filepath, string myKeyString)
{
try
{
DirectoryInfo TheFolder = new DirectoryInfo(filepath);
foreach (FileInfo NextFolder in TheFolder.GetFiles())
{
//文件夹路径
string Path = NextFolder.DirectoryName;
//获得被加密文件名
string myInFileName = NextFolder.FullName;
//获得加密文件名
string myOutFileName = "temp" + NextFolder.Name;
//设定初始变量
byte[] myDESIV ={ 0x41, 0x72, 0x65, 0x79, 0x6F, 0x75, 0x6D, 0x79, 0x53, 0x6E, 0x6F, 0x77, 0x6D, 0x61, 0x6E, 0x3F };
byte[] myDESKey ={ };
switch (myKeyString.Length)
{
case 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] };
break;
case 9:
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], (byte)myKeyString[8] };
break;
case 10:
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], (byte)myKeyString[8], (byte)myKeyString[9] };
break;
case 11:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10] };
break;
case 12:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11] };
break;
case 13:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12] };
break;
case 14:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13] };
break;
case 15:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14] };
break;
case 16:
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14], (byte)myKeyString[15] };
break;
default:
if (myKeyString.Length > 8 && myKeyString.Length < 16)
{
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] };
}
else
{
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], (byte)myKeyString[8], (byte)myKeyString[9], (byte)myKeyString[10], (byte)myKeyString[11], (byte)myKeyString[12], (byte)myKeyString[13], (byte)myKeyString[14], (byte)myKeyString[15] };
}
break;
}
//创建输入和输出文件流
FileStream myInFileStream = new FileStream(myInFileName, FileMode.Open, FileAccess.Read);
FileStream myOutFileStream = new FileStream(Path + "\\" + myOutFileName, FileMode.OpenOrCreate, FileAccess.Write);
myOutFileStream.SetLength(0);
//每次的中间流
byte[] inSertData = new byte[100];
//代表已经加密流的大小
int completedLength = 0;
//代表要加密文件总的大小
long inFileSize = myInFileStream.Length;
//创建RijndaelManaged加密对象
RijndaelManaged myRijndael = new RijndaelManaged();
//创建加密流
CryptoStream enCrytoStream = new CryptoStream(myOutFileStream, myRijndael.CreateDecryptor(myDESKey, myDESIV), CryptoStreamMode.Write);
//从输入文件中读取流,然后加密到输出文件流
while (completedLength < inFileSize)
{
//每次写入加密文件的数据大小
int length = myInFileStream.Read(inSertData, 0, 100);
enCrytoStream.Write(inSertData, 0, length);
completedLength += length;
}
//关闭流
try
{
enCrytoStream.Close();
myInFileStream.Close();
myOutFileStream.Close();
}
catch (Exception)
{
myInFileStream.Close();
myOutFileStream.Close();
return false;
}
FileInfo fi = new FileInfo(myInFileName);
fi.Delete();//将未解迷原文件删除
FileInfo fiOut = new FileInfo(Path + "\\" + myOutFileName);
fiOut.MoveTo(myInFileName);//将已解密的文件重命名成原未解密的文件名
}
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
C#文件加解密
最新推荐文章于 2024-04-13 14:54:16 发布