我想写一个小的.NET脚本/工具,它至少与SecretSync或BoxCryptor基本相同,但不会将加密密钥存储在公司的Web服务器上。
首先,这听起来很简单:您有两个文件夹 - 一个"解密"文件夹和"加密"文件夹。在这两个文件夹中都有一个文件系统观察器,因此该工具会在文件更改时收到通知。如果文件在"解密"文件夹中发生更改,它将加密该文件并将其写入"加密"文件夹。如果文件在"加密"文件夹中发生更改,它将解密该文件并将其写入"解密"文件夹。
到目前为止没有问题。
但是,如果用户直接从"解密"文件夹运行应用程序(例如KeePass)会发生什么?同步和加密过程现在会遇到问题,因为文件已从应用程序中锁定。我可以做些什么来避免处理此问题,以便应用程序仍然可以在同步和加密过程旁边运行?
感谢您的任何帮助!
更新:我仍然找不到这个问题的答案。使用 FileSystemWatcher 类进行同步时,很容易应用加密/解密,但您遇到了文件锁定问题(由于流或应用程序阻止了文件)。我还尝试Microsoft同步框架。文件同步适用于它,但我不知道如何即时加密/解密文件。
也许有人有一些工作代码示例。
受到伊万诺夫回答的启发,你也许应该看看AlphaVSS
。它是卷影复制服务的 .Net 包装器。
这个,您可以定期(例如每 15 分钟)制作快照,并将文件从解密文件夹从 VSS 副本复制到加密文件夹中。为了提高速度,您仍然可以使用 FileSystemWatcher 简单地记录自上次复制以来更改了哪些文件,并仅从卷影副本复制这些文件。
研究使用卷影复制服务,确保获取适用于所选操作系统的 SDK
BoxCryptor正在使用Dokan库,这是一个用于Windows的用户模式文件系统。该库允许您的程序接收有关虚拟驱动器中各种文件系统相关操作的回调。这样,您可以响应这些回调并根据文件系统操作对数据进行加密/解密。
文件系统筛选器驱动程序可能是实现任务的唯一正确方法。通过这种方式,您可以实现数据的动态加密、解密和镜像。
我相信我们的回调过滤器会帮助你。这是一个文件系统过滤器(包括驱动程序,您只编写用户模式代码),它允许您检查和修改文件系统请求的内容。包括加密示例。