164 lines
4.5 KiB
C#
164 lines
4.5 KiB
C#
using System.IO;
|
|
using System.Security.Cryptography;
|
|
using System.Windows;
|
|
|
|
namespace ShrlAlgo.Toolkit.Core.Heplers;
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|