如何使用.net创建加密的文件容器
本文关键字:文件 加密 何使用 net 创建 | 更新日期: 2023-09-27 17:49:29
我需要在asp.net mvc应用程序中创建一个加密的文件容器。
我发现这个程序可以完成这项工作
http://www.michaelcodes.net/post/TrueCrypt-6a-System-Encryption-Benchmarks.aspx
,但它应该与。net集成
有没有办法使用。net库来实现这一点?我还没找到。
特点:
- 系统需要能够从中添加和删除文件容器,并在请求时读取内容。但是所有的操作需要从系统内部完成。 c#实现
你可以把你的文件放在自定义类列表中:
[Serializable]
public class FileEntry
{
public string FileName {get;set;}
public string FileRelativePath {get;set;}
public byte[] FileContents {get;set;}
}
将文件添加到列表中:
List<FileEntry> files = new List<FileEntry> ();
for .......
{
files.Add(new FileEntry()
{
FileName = .....,
FileRelativePath = .....,
FileContents = File.ReadAllBytes(......),
};
}
然后,使用BinarryFormatter将该结构转换为字节数组:
byte[] filesBytes;
BinaryFormatter ser = new BinaryFormatter();
using(MemoryStream ms = new MemoryStream())
{
ser.Serialize(ms, files);
filesBytes = ms.ToArray();
}
现在,你的结构是byte[],你可以很容易地用一些简单的方法加密它们,像这样:
filesBytes = Encrypt(filesBytes , ......);
然后将加密的字节保存到带有自定义扩展名的位置:
File.WriteAllBytes(".........'.....encr",filesBytes);
然后,当您想重新打开文件并读取已清除的数据时:
byte[] encryptedData = File.ReadAllBytes(".......'.....encr");
使用相同的算法解密内容:
byte[] clearContent = Decrypt(encryptedData, ......);
并将内容反序列化为主结构:
BinaryFormatter ser = new BinaryFormatter();
using(MemoryStream ms = new MemoryStream(clearContent))
{
List<FileEntry> files = ser.Deserialize(ms) as List<FileEntry>;
}
然后,写入文件的内容到某个位置,如果你想:
foreach(var file in files)
{
File.WriteAllBytes(string.Format("........{0}...{1}",file.FileRelativePath , file.FileName), file.FileContents)
}
你可以用这个关于加密的问题:
在。net中使用秘密加密/混淆字节数组的简单方法?
这是一个关于二进制格式化程序的例子:
我已经把这个答案贴在我的博客上了
如果您想使用TrueCrypt,您可以在系统启动时自动挂载到驱动器,然后在映射的驱动器上使用常规文件操作。
如果您不希望以公共访问方式挂载卷(对相关应用程序的外部访问),那么您确实需要更深入的API访问。
我不建议您从头开始编写自己的c#实现。要在TrueCrypt中获得完善的安全级别,您需要技能和时间-这两者都已进入TC。如果你不同时使用这两种方法,你很容易就会面临很大的安全风险。
您可以通过导入dll简单地使用自动互操作(尽管我不能确定)。我相信TC是开源的,如果是这样的话,你可以外包一个C/c++编码员来编写一个。net包装器——它不需要挂载卷,但允许只基于内部应用程序的文件访问。