【问题标题】:File encryption library for .NET.NET 文件加密库
【发布时间】:2018-09-21 23:35:45
【问题描述】:

我正在寻找.NET 下的文件加密库。 它需要能够搜索,所以CryptoStream 是不可能的。 (我知道它继承了 Seek 方法,但没有实现。)

我需要查找,因为我的应用程序以非连续顺序处理大文件。我还需要同时读取和写入文件

我知道CBC 大部分时间都用于文件加密,但使用它是不可能进行查找(和写入)的。但不知何故,像TrueCryptBitLocker 这样的全盘加密软件设法像那样使用它。 (编辑:TrueCrypt 不再使用 CBC,他们移至 LRW,然后移至 XTS。我的意思是它是可能的。

这是一个爱好项目,所以我对免费图书馆很感兴趣。如果它只支持 .NET 4 也没关系。

编辑Bouncy Castle 不好,因为它的 CipherStream 不能像 .NET 的 CryptoStream 那样搜索。

【问题讨论】:

    标签: .net encryption cryptography


    【解决方案1】:

    一个选项可能是免费的充气城堡:

    http://www.bouncycastle.org/csharp/

    我不确定你想在你的项目中如何寻找。但它至少有一些功能可以解决 seek 的问题:

    “X509CertificateParser/X509CrlParser 现在可以处理不支持查找的流中的多个证书/CRL”

    【讨论】:

    • 谢谢。我去看看。
    • 我很奇怪,在随机阅读了这个我以前不知道的库之后,我来到了 StackOverflow,主页上的第一个问题可以由这个库来回答。跨度>
    • @dlamblin:一切都已连接! :)
    • 证书/CRL 解析器能够处理不可搜索的流与提供可搜索的加密文件实现不同,这正是 OP 所追求的。
    • 我在 Bouncy Caste 中没有找到任何支持搜索流的内容。
    【解决方案2】:

    在 CBC 下寻找不是不可能的 - 事实上 CBC 模式是微不足道的。要解密块 i,您只需要知道密钥、加密块 C_i 和前一个加密块 C_i-1。您当然不必解密整个先前的流。

    【讨论】:

    • 谢谢!看来我应该仔细检查一下。无论如何,我认为这应该是一个评论。如果您想说我可以轻松实现它,而不是说我宁愿为此使用现有的库,因为它很容易出错。
    • 哦,等等!使用 CBC 搜索和编写是不可能的,因为那样你就必须更改所有进一步的块!
    • 这是真的,TrueCrypt(当它使用 CBC 模式时,它已经没有很长时间了)解决这个问题的方法是在每个扇区的开始。无论如何,磁盘一次只能读取和写入一个扇区。您可能需要找到一种以类似方式处理文件的实现,方法是将它们分解为一起读取和写入的独立块。
    • 老实说,我开始写一个做这个的库,但是当我发现它有多难之后,我开始寻找一个库:)
    【解决方案3】:

    如果您使用 AES,那么 XTS 模式是一个不错的选择。这就是 TrueCrypt 使用的。但 XTS 的实施并非易事。

    一个简单的方法是使用 Threefish:它是一种可调整的分组密码,因此您可以简单地使用块索引作为调整,然后以类似 ECB 的方式加密数据。缺点是 Threefish 不是标准的。这应该相对容易实现。

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多