C#文件加解密
来源:互联网 发布:网络常用端口号大全 编辑:程序博客网 时间:2024/03/28 19:49
#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
0 0
- C#文件加解密
- C#文件加解密
- c#实现文件加解密
- C#加解密
- C# MD5加解密
- C#加解密
- c# md5 加解密
- C# 对称加解密
- c# AES加解密
- c#数据加解密
- 文件加解密
- 文件字节加解密
- android文件加解密
- DES加解密文件
- 文件加解密方法
- DES文件加解密
- 文件加解密操作
- 文件AES加解密
- 设计模式(9)--迭代器与组合模式
- ORA-01036: 非法的变量名/编号
- c++回调函数小demo和解释
- 反射机制与系统耦合实例详解
- Linux目录结构
- C#文件加解密
- Eclipse插件的安装方法三则
- css 临散小东东
- Smarty实例教程----实例篇(一、使用PHP内置MYSQL函数)
- OPNET14.5学习心得(一)
- 几十年的股市投资赚钱的真理,那怕是是猪一样的智商,也可以成功
- Android 开发 之 JNI入门 - NDK从入门到精通
- 接上一篇
- 如何去处理好你的简历