Files
Shrlalgo.RvKits/Sai.Toolkit.Core/Heplers/FileEncryptHelper.cs

164 lines
4.5 KiB
C#
Raw Normal View History

2024-09-22 11:05:41 +08:00
using System.IO;
using System.Security.Cryptography;
using System.Windows;
namespace Sai.Toolkit.Core.Helpers;
public static class FileEncryptHelper
{
public static void DecryptFile(string strPath)
{
try
{
var intLent = strPath.LastIndexOf("\\", StringComparison.Ordinal) + 1; //设置截取的起始位置
var intLong = strPath.Length; //设置截取的长度
var strName = strPath.Substring(intLent, intLong - intLent); //要加密的文件名称
var intTxt = strName.LastIndexOf(".", StringComparison.Ordinal); //设置截取的起始位置
strName = strName.Substring(0, intTxt); //获取文件拓展名
if (strName.LastIndexOf("Out", StringComparison.Ordinal) != -1)
{
strName = strName.Substring(0, strName.LastIndexOf("Out", StringComparison.Ordinal));
}
else
{
strName += "In";
}
var strInName = strPath.Substring(0, strPath.LastIndexOf("\\", StringComparison.Ordinal) + 1) + strName + ".txt"; //解密后的文件名及路径
//解密文件密钥
byte[] key =
{
24,
55,
102,
24,
98,
26,
67,
29,
84,
19,
37,
118,
104,
85,
121,
27,
93,
86,
24,
55,
102,
24,
98,
26,
67,
29,
9,
2,
49,
69,
73,
92
};
byte[] iv = { 22, 56, 82, 77, 84, 31, 74, 24, 55, 102, 24, 98, 26, 67, 29, 99 };
#if NET8_0
var myRijndael = Aes.Create(); //创建RijndaelManaged对象
#else
var myRijndael = new RijndaelManaged();
#endif
//创建RijndaelManaged对象
var fsOut = File.Open(strPath, FileMode.Open, FileAccess.Read); //创建FileStream对象
var csDecrypt = new CryptoStream(fsOut, myRijndael.CreateDecryptor(key, iv), CryptoStreamMode.Read);
var sr = new StreamReader(csDecrypt); //把文件读出来
var sw = new StreamWriter(strInName); //解密后写一个新文件
sw.Write(sr.ReadToEnd());
sw.Flush();
sw.Close(); //关闭FileStream对象
fsOut.Close(); //关闭FileStream对象
if (MessageBox.Show("解密成功!解密后的文件名及路径为:\n" + strInName + ",是否删除文件", "提示信息", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
File.Delete(strPath); //清除指定文件
//tbpathname.Text = "";//请空文本文件
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public static void EncryptFile(string strPath)
{
try
{
var intLent = strPath.LastIndexOf("\\", StringComparison.Ordinal) + 1; //设置截取的起始位置
var intLong = strPath.Length; //设置截取的长度
var strName = strPath.Substring(intLent, intLong - intLent); //要加密的文件名称
var intTxt = strName.LastIndexOf(".", StringComparison.Ordinal); //设置截取的起始位置
var intTxtLeng = strName.Length; //设置截取的长度
var strTxt = strName.Substring(intTxt, intTxtLeng - intTxt); //取出文件的拓展名
strName = strName.Substring(0, intTxt);
var strOutName = strPath.Substring(0, strPath.LastIndexOf("\\", StringComparison.Ordinal) + 1) + strName + "Out" + strTxt; //加密后的文件名及路径
byte[] key =
{
24,
55,
102,
24,
98,
26,
67,
29,
84,
19,
37,
118,
104,
85,
121,
27,
93,
86,
24,
55,
102,
24,
98,
26,
67,
29,
9,
2,
49,
69,
73,
92
}; //加密文件密钥
byte[] iv = { 22, 56, 82, 77, 84, 31, 74, 24, 55, 102, 24, 98, 26, 67, 29, 99 };
#if NET8_0
var myRijndael = Aes.Create();
#else
var myRijndael = new RijndaelManaged();
#endif
var fsOut = File.Open(strOutName, FileMode.Create, FileAccess.Write);
var fsIn = File.Open(strPath, FileMode.Open, FileAccess.Read);
var csDecrypt = new CryptoStream(fsOut, myRijndael.CreateDecryptor(key, iv), CryptoStreamMode.Write); //写入加密文本文件
var br = new BinaryReader(fsIn); //创建阅读器来加密文件
csDecrypt.Write(br.ReadBytes((int)fsIn.Length), 0, (int)fsIn.Length); //将数据写入加密文件
csDecrypt.Close(); //关闭CryptoStream对象
fsIn.Close(); //关闭FileStream对象
fsOut.Close(); //关闭FileStream对象
if (MessageBox.Show("加密成功!加密后的文件名及路径为:\n" + strOutName + ",是否删除文件", "提示信息", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
File.Delete(strPath); //清除指定文件
//tbpathname.Text = "";//请空文本文件
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}