博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 文件夹加密
阅读量:7171 次
发布时间:2019-06-29

本文共 6075 字,大约阅读时间需要 20 分钟。

可以加密文件内容,也可以对文件夹本身进行加密,本文对文件夹加密。

一、指定或生成一个密钥

  1)指定的密钥

1  /// 2         /// 密钥,这个密码可以随便指定3         /// 4         public static string sSecretKey = "?\a??64(?";
View Code

 2) 也可以生成密钥

1   ///  2         /// 生成一个64位的密钥 3         ///  4         /// 
string
5 public static string GenerateKey() 6 { 7 //创建对称算法的一个实例。自动生成的密钥和IV。 8 DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create(); 9 10 // 使用自动生成的密钥进行加密。11 return ASCIIEncoding.ASCII.GetString(desCrypto.Key);12 }
View Code

二、调用ZeroMemory 函数从内存中删除Key

1  /// 2         /// 调用该函数从内存中删除的Key后使用3         /// 4         [DllImport("KERNEL32.DLL", EntryPoint = "RtlZeroMemory")]5         public static extern bool ZeroMemory(IntPtr Destination, int Length);
View Code
三、加密文件
1   ///  2         /// 加密文件 3         ///  4         /// 待加密的文件的完整路径 5         /// 加密后的文件的完整路径 6         public static void EncryptFile(string sInputFilename, string sOutputFilename) 7         { 8             FileStream fsInput = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read); 9 10             FileStream fsEncrypted = new FileStream(sOutputFilename, FileMode.Create, FileAccess.Write);11             DESCryptoServiceProvider DES = new DESCryptoServiceProvider();12             DES.Key = ASCIIEncoding.ASCII.GetBytes(sSecretKey);13             DES.IV = ASCIIEncoding.ASCII.GetBytes(sSecretKey);14             ICryptoTransform desencrypt = DES.CreateEncryptor();15             CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write);16 17             byte[] bytearrayinput = new byte[fsInput.Length];18             fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);19             cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);20 21             cryptostream.Flush();22             fsInput.Flush();23             fsEncrypted.Flush();24             cryptostream.Close();25             fsInput.Close();26             fsEncrypted.Close();27         }
View Code
四、解密文件
1 ///  2         /// 解密文件 3         ///  4         /// 待解密的文件的完整路径 5         /// 解密后的文件的完整路径 6         public static void DecryptFile(string sInputFilename, string sOutputFilename) 7         { 8             DESCryptoServiceProvider DES = new DESCryptoServiceProvider(); 9             DES.Key = ASCIIEncoding.ASCII.GetBytes(sSecretKey);10             DES.IV = ASCIIEncoding.ASCII.GetBytes(sSecretKey);11 12             FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);13             ICryptoTransform desdecrypt = DES.CreateDecryptor();14             CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);15             StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);16             fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());17             fsDecrypted.Flush();18             fsDecrypted.Close();19         }
View Code
五、完整代码
1 ///  2     /// 文件加密 3     ///  4     public class FileSecretHelper 5     { 6         ///  7         /// 密钥,这个密码可以随便指定 8         ///  9         public static string sSecretKey = "?\a??64(?";10 11         /// 12         /// 调用该函数从内存中删除的Key后使用13         /// 14         [DllImport("KERNEL32.DLL", EntryPoint = "RtlZeroMemory")]15         public static extern bool ZeroMemory(IntPtr Destination, int Length);16 17 18         /// 19         /// 生成一个64位的密钥20         /// 21         /// 
string
22 public static string GenerateKey()23 {24 //创建对称算法的一个实例。自动生成的密钥和IV。25 DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();26 27 // 使用自动生成的密钥进行加密。28 return ASCIIEncoding.ASCII.GetString(desCrypto.Key);29 }30 31 /// 32 /// 加密文件33 /// 34 /// 待加密的文件的完整路径35 /// 加密后的文件的完整路径36 public static void EncryptFile(string sInputFilename, string sOutputFilename)37 {38 FileStream fsInput = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);39 40 FileStream fsEncrypted = new FileStream(sOutputFilename, FileMode.Create, FileAccess.Write);41 DESCryptoServiceProvider DES = new DESCryptoServiceProvider();42 DES.Key = ASCIIEncoding.ASCII.GetBytes(sSecretKey);43 DES.IV = ASCIIEncoding.ASCII.GetBytes(sSecretKey);44 ICryptoTransform desencrypt = DES.CreateEncryptor();45 CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write);46 47 byte[] bytearrayinput = new byte[fsInput.Length];48 fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);49 cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);50 51 cryptostream.Flush();52 fsInput.Flush();53 fsEncrypted.Flush();54 cryptostream.Close();55 fsInput.Close();56 fsEncrypted.Close();57 }58 59 /// 60 /// 解密文件61 /// 62 /// 待解密的文件的完整路径63 /// 解密后的文件的完整路径64 public static void DecryptFile(string sInputFilename, string sOutputFilename)65 {66 DESCryptoServiceProvider DES = new DESCryptoServiceProvider();67 DES.Key = ASCIIEncoding.ASCII.GetBytes(sSecretKey);68 DES.IV = ASCIIEncoding.ASCII.GetBytes(sSecretKey);69 70 FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);71 ICryptoTransform desdecrypt = DES.CreateDecryptor();72 CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);73 StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);74 fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());75 fsDecrypted.Flush();76 fsDecrypted.Close();77 }78 }
View Code
 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/OnlyVersion/p/4025728.html

你可能感兴趣的文章
phonegap2.9.1中自定义插件实现分享
查看>>
MySQL服务器学习笔记!(四) ——备份/恢复
查看>>
/var/log目录下的20个Linux日志文件功能详解
查看>>
【Android进阶学习】Http编程之HttpConnection
查看>>
Linux 网卡重命名
查看>>
cisco1226
查看>>
Linux的yum与list结合
查看>>
详解Python 采用 requests + Beautiful Soup 爬取房天下新楼盘推荐
查看>>
Linux 命令历史
查看>>
我的友情链接
查看>>
Oracle Dataguard报错:ARC1: Becoming the 'no FAL' ARC
查看>>
COQ Soft-表格样式
查看>>
centos7 的系统服务
查看>>
聚焦百度年会美女刘冬——IT听听看特别版
查看>>
加超链接
查看>>
OpenStack控制台console偶尔无法使用或加载慢
查看>>
使用X-Frame-Options防止网页被Frame
查看>>
NIO入门系列之第6章:分散和聚集
查看>>
奔跑中的2015——有时候我们需要慢下来
查看>>
Xshell使用root用户连接Ubuntu14.04时,提示SSH服务器拒绝了密码,请再试一次
查看>>