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