C# 文件夹加密
可以加密文件内容,也可以对文件夹本身进行加密,本文对文件夹加密。
一、指定或生成一个密钥
1)指定的密钥
/// <summary>
/// 密钥,这个密码可以随便指定
/// </summary>
public static string sSecretKey = "?\a??64(?";
2) 也可以生成密钥
/// <summary>
/// 生成一个64位的密钥
/// </summary>
/// <returns>string</returns>
public static string GenerateKey()
{
//创建对称算法的一个实例。自动生成的密钥和IV。
DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create(); // 使用自动生成的密钥进行加密。
return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
}
二、调用ZeroMemory 函数从内存中删除Key
///<summary>
/// 调用该函数从内存中删除的Key后使用
/// </summary>
[DllImport("KERNEL32.DLL", EntryPoint = "RtlZeroMemory")]
public static extern bool ZeroMemory(IntPtr Destination, int Length);
三、加密文件
/// <summary>
/// 加密文件
/// </summary>
/// <param name="sInputFilename">待加密的文件的完整路径</param>
/// <param name="sOutputFilename">加密后的文件的完整路径</param>
public static void EncryptFile(string sInputFilename, string sOutputFilename)
{
FileStream fsInput = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read); FileStream fsEncrypted = new FileStream(sOutputFilename, FileMode.Create, FileAccess.Write);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sSecretKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sSecretKey);
ICryptoTransform desencrypt = DES.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write); byte[] bytearrayinput = new byte[fsInput.Length];
fsInput.Read(bytearrayinput, , bytearrayinput.Length);
cryptostream.Write(bytearrayinput, , bytearrayinput.Length); cryptostream.Flush();
fsInput.Flush();
fsEncrypted.Flush();
cryptostream.Close();
fsInput.Close();
fsEncrypted.Close();
}
四、解密文件
/// <summary>
/// 解密文件
/// </summary>
/// <param name="sInputFilename">待解密的文件的完整路径</param>
/// <param name="sOutputFilename">解密后的文件的完整路径</param>
public static void DecryptFile(string sInputFilename, string sOutputFilename)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sSecretKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sSecretKey); FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);
ICryptoTransform desdecrypt = DES.CreateDecryptor();
CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);
StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
fsDecrypted.Flush();
fsDecrypted.Close();
}
五、完整代码
/// <summary>
/// 文件加密
/// </summary>
public class FileSecretHelper
{
/// <summary>
/// 密钥,这个密码可以随便指定
/// </summary>
public static string sSecretKey = "?\a??64(?"; /// <summary>
/// 调用该函数从内存中删除的Key后使用
/// </summary>
[DllImport("KERNEL32.DLL", EntryPoint = "RtlZeroMemory")]
public static extern bool ZeroMemory(IntPtr Destination, int Length); /// <summary>
/// 生成一个64位的密钥
/// </summary>
/// <returns>string</returns>
public static string GenerateKey()
{
//创建对称算法的一个实例。自动生成的密钥和IV。
DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create(); // 使用自动生成的密钥进行加密。
return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
} /// <summary>
/// 加密文件
/// </summary>
/// <param name="sInputFilename">待加密的文件的完整路径</param>
/// <param name="sOutputFilename">加密后的文件的完整路径</param>
public static void EncryptFile(string sInputFilename, string sOutputFilename)
{
FileStream fsInput = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read); FileStream fsEncrypted = new FileStream(sOutputFilename, FileMode.Create, FileAccess.Write);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sSecretKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sSecretKey);
ICryptoTransform desencrypt = DES.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write); byte[] bytearrayinput = new byte[fsInput.Length];
fsInput.Read(bytearrayinput, , bytearrayinput.Length);
cryptostream.Write(bytearrayinput, , bytearrayinput.Length); cryptostream.Flush();
fsInput.Flush();
fsEncrypted.Flush();
cryptostream.Close();
fsInput.Close();
fsEncrypted.Close();
} /// <summary>
/// 解密文件
/// </summary>
/// <param name="sInputFilename">待解密的文件的完整路径</param>
/// <param name="sOutputFilename">解密后的文件的完整路径</param>
public static void DecryptFile(string sInputFilename, string sOutputFilename)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sSecretKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sSecretKey); FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);
ICryptoTransform desdecrypt = DES.CreateDecryptor();
CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);
StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
fsDecrypted.Flush();
fsDecrypted.Close();
}
}
C# 文件夹加密的更多相关文章
- mac系统下给文件夹加密方法
电脑里我们往往会有许多隐私的文件,不希望被别人看到,在过去的Windows电脑里,我们习惯性的会在文件夹中将该文件隐藏,但是这个隐藏是不安全的,遇到稍微会点电脑技术的人就可以给你解开,安全性不高,ma ...
- mac系统怎么给文件夹加密?mac文件夹加密教程
mac系统怎么给文件夹加密?目前来说,若想要对你的Mac OS下面的文件进行加密的话有三种方法可以可以做到,第一种方法,Mac自带磁盘工具:第二种方法,例如BatterZip此类Mac压缩解压工具打包 ...
- 使用Windows EFS(怎么给文件夹加密)进行文件加密
和Windows BitLocker一样,Encrypting File System(EFS,加密文件系统)是Windows内置的一套基于公共密钥的加密机制,可以加密NTFS分区上的文件和文件夹,能 ...
- 无需软件windows如何加密文件夹
在百部百科上看到,放在博客中以便查看. 1.首先打开记事本,当然如果你的电脑里装有类似notepad++的文本编辑软件的也可以,但是不能用word.用这类软件好处是代码高亮,看上去舒服,减少错误率. ...
- 用cmd加密文件夹
随着电脑的广泛应用,个人电脑的私人空间越来越大,很多人喜欢把个人的一些私隐的文件存放在电脑上,私隐文件当然是不想别人看到的,为了防止别人看不见自己的文件,可以有很多的方法,今天在网上看了一些文档,学会 ...
- 使用apache htpasswd生成加密的password文件,并使用.htaccess控制文件夹訪问
htpasswd 是apache的小工具.在apache安装文件夹bin下可找到. Usage: htpasswd [-cmdpsD] passwordfile username htpasswd - ...
- zip4j加密压缩、解压缩文件、文件夹
原文:http://blog.csdn.net/k21325/article/details/54376188 1.首先,引用到zip4j的第三方类库,感谢作者的无私奉献,官网打不开,这里就不贴了,下 ...
- 用cmd命令加密文件夹
比如新建一个叫“大学财务”的文件夹,我希望这个文件夹下的内容是加密隐藏的. 查看的时候需要点击“大学财务.bat”这个文件,然后输入设置的密码即可. Cls @ECHO OFF title Folde ...
- (转载)linux下各个文件夹的作用
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
随机推荐
- 【final】站立会议---11.27
名称:nice! 组长:李权 成员:于淼 刘芳芳韩媛媛 宫丽君 时间:11月27日 13:00 项目内容:约跑app(约吧) 地点:传媒西楼220室 内容: 新任务的分配 1.李权分配任务 2.韩媛 ...
- 关于在官网上查看和下载特定版本的webrtc代码
注:这个方法已经不适用了,帖子没删只是留个纪念而已 gclient:如果不知道gclient是什么东西 ... 就别再往下看了. 下载特定版本的代码: #gclient sync --revision ...
- 【转】SVN管理多个项目版本库
转载地址:http://blog.163.com/zhangxuemin_zy/blog/static/10178565520115704031799/ SVN管理多个项目版本库: 安装SVN服务 ...
- Unity碰撞器触发关系测试
本文刚体有关的内容不再赘述,主要测试碰撞器和触发器的消息关系. 刚体在这篇有测试:U3D刚体测试1-刚体非刚体物体非Kinematic等之间的碰撞关系 碰撞器测试结果: 1.A对象为Collider, ...
- GMF Q&A(1): 如何让palette支持拖拽(DnD)等10则
1,如何让palette支持拖拽(DnD) 在*PaletteFactory类中,把私有类NodeToolEntry 和LinkToolEntry的基类修改为PaletteToolEntry.并在构造 ...
- Python多进程编程
转自:Python多进程编程 阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiproces ...
- git 临时记录
http://blog.csdn.net/wangbole/article/details/8552808 http://blog.csdn.net/gq414047080/article/detai ...
- Linux - 进程查看与管理
标签(空格分隔): Linux 进程的静态查看 查看系统所有进程 ps -ef -- 输出来好乱,看不懂..: ps aux -- a表示所有与终端相关的进程,u表示所有以用户组织的进程状态的信息,x ...
- How can I view currently running MySQL queries?( 查看正在运行的MySQL语句/脚本命令)
show processlist;show processlist\G;SHOW FULL PROCESSLIST;SHOW FULL PROCESSLIST\G; REF:http://dev.my ...
- Ubuntu快捷键
https://linux.cn/article-3025-1.html 超级键操作 1.超级键(Win键)–打开dash. 2.长按超级键– 启动Launcher.并快捷键列表. 3.按住超级键,再 ...