.NET的文件加密库

3
我正在寻找一个在.NET下的文件加密库。它需要能够寻址,所以CryptoStream不适用。(我知道它继承了Seek方法,但未实现。)
我需要寻址,因为我的应用程序以非顺序方式处理大文件。我还需要同时读写文件。
我知道大多数时候CBC用于文件加密,但使用它进行查找(和写入)是不可能的。但一些全盘加密软件,如TrueCryptBitLocker却可以这样使用它。(编辑:TrueCrypt不再使用CBC,他们转向了LRW,然后到XTS。我的意思是这是可能的。
这是一个业余项目,所以我对免费库很感兴趣。此外,如果只支持.NET 4也没有关系。

编辑: Bouncy Castle 不好,因为它的 CipherStream 无法像 .NET 的 CryptoStream 一样进行定位。

3个回答

1

一个选择可能是免费的 bouncy castle:

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

我不确定您想如何在项目中进行搜索。但是它至少具有一些功能来解决搜索问题:

"X509CertificateParser/X509CrlParser现在可以处理不支持搜索的流中的多个证书/CRL"


谢谢。我会看一下的。 - KovBal
对我来说非常奇怪的是,在随机阅读了我以前不知道的这个库之后,我来到StackOverflow,首页上的热门问题可以通过这个库来回答。 - dlamblin
@dlamblin: 一切都相互关联!:) - KovBal
1
证书/CRL解析器能够处理非可寻流并不意味着提供可寻的加密文件实现,这正是OP所追求的。 - caf
我在Bouncy Castle中没有找到任何支持寻找流的内容。 - KovBal

0

如果您使用AES,那么XTS模式是一个不错的选择。这就是TrueCrypt使用的方式。但是XTS的实现并不简单。

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


0

在CBC模式下,寻找并不是不可能的 - 实际上,CBC模式很容易被寻找到。要解密第i个块,您只需要知道密钥、加密块C_i和前一个加密块C_i-1。您当然不必解密整个先前的流。


谢谢!看起来我应该再仔细检查一下。不管怎样,我认为这应该是一条注释。如果你想说我可以很容易地实现它,那么我要说我宁愿使用现有的库,因为很容易出错。 - KovBal
哦,等等!使用CBC进行寻找和写入是不可能的,因为那样你就必须改变所有后续的块! - KovBal
2
这是真的,TrueCrypt(已经很久没有使用CBC模式了)解决这个问题的方法是在每个扇区的开头使用新的IV重新启动CBC。磁盘只能一次读写一个扇区。您可能需要找到一种类似的文件实现方式,将它们分成独立的块,一起读写。 - caf
说实话,我开始写一个能够做到这一点的库,但是在发现它有多么困难之后,我开始寻找一个库 :) - KovBal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接