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); } } }