使用加密实现双向文件夹同步以保护我的Dropbox数据

13
我想写一个小的.NET脚本/工具,与SecretSyncBoxCryptor至少大致相同,但不会将加密密钥存储在公司的Web服务器上。
起初听起来非常简单:您有两个文件夹-一个“已解密”文件夹和一个“已加密”文件夹。这两个文件夹都有一个FileSystemWatcher,因此当文件更改时,工具会收到通知。如果“已解密”文件夹中的文件更改,则它会加密该文件并将其写入“已加密”文件夹。如果“已加密”文件夹中的文件更改,则它会对文件进行解密并将其写入“已解密”文件夹。
到目前为止没有问题。
但是,如果用户直接从“已解密”文件夹运行应用程序(例如KeePass),那么同步和加密过程将遇到问题,因为该应用程序锁定了文件。是否有什么方法可以避免这个问题,使应用程序仍然可以在同步和加密过程旁边运行?
感谢任何帮助! 更新:我仍然找不到这个问题的答案。当使用FileSystemWatcher类进行同步时,应用加密/解密很容易,但由于流或应用程序阻止文件,您会遇到文件锁定问题。我还尝试了Microsoft Sync Framework。它可以进行文件同步,但我不知道如何在运行时加密/解密文件。

也许有人有一些可行的代码示例。
4个回答

4
受Ivanov的回答启发,您可能需要查看AlphaVSS。它是卷影复制服务的.Net包装器。
有了它,您可以定期创建快照(例如每15分钟)并将文件从解密文件夹复制到VSS副本中的加密文件夹。为了提高速度,您仍然可以使用FileSystemWatcher来简单记录自上次复制以来更改的文件,并仅复制这些文件从阴影副本中。

1

不知道这怎么能帮我解决问题。对我来说,它看起来像是卷影复制服务只是备份文件,但文件仍然会被锁定。 - Alexander
该服务允许您在文件仍在使用、打开等情况下复制文件;您需要阅读文档,不同的SDK适用于不同的操作系统,这里有一个很好的起点博客http://www.codeproject.com/KB/dotnet/makeshadowcopy.aspx。 - Kris Ivanov

0

BoxCryptor使用Dokan库,这是Windows的用户模式文件系统。该库允许您的程序接收有关虚拟驱动器中各种文件系统相关操作的回调。通过这种方式,您可以响应这些回调并根据文件系统操作加密/解密数据。


Dokan库不是在BoxCryptor中用于模拟虚拟驱动器的吗?BoxCryptor的虚拟驱动器在多用户操作系统上真的很糟糕。如果另一个用户尝试在BoxCryptor未运行时访问这些驱动器,它会导致严重问题。 - Alexander
@Alexander:是的,Dokan用于模拟虚拟驱动器。我提到的回调函数在用户访问虚拟驱动器内容时被调用。 - Giorgi

0

文件系统过滤驱动程序可能是实现您任务的唯一正确方式。这样,您可以实现数据的即时加密、解密和镜像。

我相信我们的CallbackFilter会对您有所帮助。这是一个文件系统过滤器(包含驱动程序,您只需编写用户模式代码),允许您检查和修改文件系统请求的内容。示例中包括加密功能。


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