【问题标题】:Two-way folder sync with encryption to secure my Dropbox data双向文件夹同步加密以保护我的 Dropbox 数据
【发布时间】:2011-08-26 09:31:58
【问题描述】:

我想编写一个小的 .NET 脚本/工具,它至少与 SecretSyncBoxCryptor 几乎相同,但不将加密密钥存储在公司的 Web 服务器上。

首先听起来很简单:您有两个文件夹 - 一个“解密”文件夹和一个“加密”文件夹。在这两个文件夹上都有一个FileSystemWatcher,因此当文件发生更改时,该工具会收到通知。 如果“解密”文件夹中的文件发生更改,它会加密文件并将其写入“加密”文件夹。如果“encrypted”文件夹中的文件发生更改,它会解密该文件并将其写入“decrypted”文件夹。

目前没有问题。

但是如果用户直接从“解密”文件夹运行应用程序(例如KeePass)会发生什么?由于文件被应用程序锁定,同步和加密过程现在会遇到问题。 我可以做些什么来避免处理这个问题,所以应用程序仍然可以在同步和加密过程之外运行?

感谢您的帮助!

更新:我仍然找不到这个问题的答案。当使用 FileSystemWatcher-class 进行同步时,很容易应用加密/解密,但是您会遇到文件锁定问题(因为流或应用程序阻塞了文件)。我也试过微软同步框架。文件同步适用于它,但我不知道如何即时加密/解密文件。

也许有人有一些工作代码示例。

【问题讨论】:

    标签: c# .net file encryption synchronization


    【解决方案1】:

    考虑使用Volume Shadow Copy Service,确保获得适用于您所选操作系统的 SDK

    【讨论】:

    • 不知道这如何帮助我解决问题。对我来说,卷影复制服务似乎只进行备份,但文件仍会被锁定。
    • 该服务允许您在仍在使用、打开等时复制文件;您必须通读文档,不同的 SDK 适用于不同的操作系统,这是一个好的开始博客 codeproject.com/KB/dotnet/makeshadowcopy.aspx
    【解决方案2】:

    受 Ivanov 回答的启发,您或许应该看看 AlphaVSS。它是卷影复制服务的 .Net 包装器。

    有了这个,您可以定期(例如每 15 分钟)创建一个快照,然后将文件从 VSS 副本中的解密文件夹复制到加密文件夹中。为了提高速度,您仍然可以使用 FileSystemWatcher 简单地记录自上次复制以来哪些文件已更改,并仅从卷影副本中复制这些文件。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • BoxCryptor 中没有使用 Dokan 库来模拟虚拟驱动器吗? BoxCryptor 的虚拟驱动器在多用户操作系统上真的很烂。如果其他用户在 BoxCryptor 未运行时尝试访问此驱动器,则会导致严重问题。
      • @Alexander:是的,Dokan 用于模拟虚拟驱动器。我提到的回调是在用户访问虚拟驱动器的内容时​​调用的。
      【解决方案4】:

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

      我相信我们的CallbackFilter 会帮助你。这是一个文件系统过滤器(包括驱动程序,您只编写用户模式代码),它允许您检查和修改文件系统请求的内容。包括加密样本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-16
        • 1970-01-01
        • 2017-10-20
        • 2017-05-15
        • 1970-01-01
        • 2022-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多