如何使用.net创建加密文件容器

时间:2012-12-26 12:00:40

标签: c# .net asp.net-mvc encryption

我需要在asp net mvc app中创建一个加密文件容器。

我找到了这个完成工作的程序

http://www.michaelcodes.net/post/TrueCrypt-6a-System-Encryption-Benchmarks.aspx

但它应与.net

集成

有没有办法用.NET库来实现?我还没找到。

功能

  • 系统需要能够添加和删除文件 容器并在请求时读取内容。但所有的 需要从系统内部完成操作。
  • C#Implementation

2 个答案:

答案 0 :(得分:2)

您可以将文件放在自定义类列表中:

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

您可以使用有关加密的问题:

Easy way to encrypt/obfuscate a byte array using a secret in .NET?

关于二进制格式化程序的this is an example

我已发布此答案to my blog:)

答案 1 :(得分:1)

如果要使用TrueCrypt,可以在系统启动时自动挂载到驱动器,然后在映射的驱动器上使用常规文件操作。

如果您不想安装具有公共访问权限的卷(访问相关应用程序的外部),那么您确实需要更深入的API访问。

我不建议从头开始编辑自己的C#实现。为了在TrueCrypt中提高安全级别,您需要技巧和时间 - 这两者都已进入TC。如果你不同时使用它们,你可以很容易地承担巨大的安全风险。

您可以通过导入dll简单地使用auto-interop(虽然我不能确定)。我相信TC是开源的,如果是这样的话,你可以外包一个C / C ++编码器来编写一个.Net包装器 - 一个不需要安装卷,但允许内部应用程序专用的基于文件的访问。