【问题标题】:How to create an encrypted file container using .net如何使用 .net 创建加密文件容器
【发布时间】:2018-05-03 18:42:31
【问题描述】:

我需要在 asp net mvc 应用程序中创建一个加密文件容器。

我发现这个程序可以完成这项工作

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

但它应该与.net集成

有没有办法使用 .NET 库来实现这一点?我还没有找到方法。

特点:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      我不建议从头开始滚动您自己的 C# 实现。要在 TrueCrypt 中完善安全级别,您需要技巧和时间——这两者都已进入 TC。如果您不同时使用这两种方法,您很容易面临巨大的安全风险。

      您可以通过导入 dll 来简单地使用自动互操作(尽管我不能确定)。我相信 TC 是开源的,如果是这样,您可以外包 C/C++ 编码器来编写 .Net 包装器 - 不需要安装卷,但允许内部应用程序仅基于文件的访问。

      【讨论】:

        猜你喜欢
        • 2010-09-09
        • 2016-08-29
        • 2012-08-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多