Синхронизация двухсторонней папки с шифрованием для защиты моих данных Dropbox
Я хотел бы написать небольшой инструмент .NET script/, который, по крайней мере, в основном такой же, как SecretSync или BoxCryptor, но без сохранения ключа шифрования на веб-серверах компании.
Сначала это звучит очень просто: у вас есть две папки - "decryped" -папка и "зашифрованная" -папка. В обеих папках есть FileSystemWatcher, поэтому инструмент получает уведомление, когда файл был изменен.
Если файл "decryped" -памят изменяется, он шифрует файл и записывает его в "зашифрованную" -панель. Если файл изменяется в "зашифрованной" папке, он расшифровывает файл и записывает его в "расшифрованную" -панель.
Пока нет проблем.
Но что произойдет, если пользователи запускают приложение (например, KeePass, например) непосредственно из "decryped" -папки? Процесс синхронизации и шифрования теперь столкнется с проблемами, поскольку файлы заблокированы из приложения.
Есть ли что-то, что я могу сделать, чтобы избежать этой проблемы, поэтому приложение все равно может работать рядом с процессом синхронизации и шифрования?
Спасибо за любую помощь!
Обновление: Я все еще не мог найти ответ на этот вопрос. При использовании класса FileSystemWatcher для синхронизации легко применять шифрование/дешифрование, но у вас возникают проблемы с блокировками файлов (из-за потоков или приложений, блокирующих файлы). Я также попробовал Microsoft Sync Framework. Файловая синхронизация работает с ней, но я не знаю, как шифровать/дешифровать файлы на лету.
Возможно, у кого-то есть небольшой пример рабочего кода.
Ответы
Ответ 1
Вдохновленный ответом Иванова, вам стоит взглянуть на AlphaVSS
. Это оболочка .Net вокруг службы теневого копирования томов.
С помощью этого вы можете сделать снимок в регулярной основе (например, каждые 15 минут) и скопировать файлы из папки расшифровки из копии VSS в папку шифрования. Чтобы увеличить скорость, вы все равно можете использовать FileSystemWatcher, чтобы просто регистрировать, какие файлы были изменены с момента последней копии, и копировать только эти файлы из теневой копии.
Ответ 2
просмотрите службу теневого копирования томов, убедитесь, что вы получили SDK для своей ОС по выбору
Ответ 3
BoxCryptor использует Dokan библиотеку, которая является файловой системой пользовательского режима для окон. Библиотека позволяет вашей программе получать обратный вызов о различных операциях, связанных с файловой системой, на виртуальном диске. Таким образом, вы можете отвечать на эти обратные вызовы и шифровать/дешифровать данные на основе работы файловой системы.
Ответ 4
Драйвер файловой системы, вероятно, является единственным правильным способом реализации вашей задачи. Таким образом вы можете внедрять "на лету" шифрование, дешифрование и зеркалирование данных.
Я считаю, что наш CallbackFilter поможет вам. Это фильтр файловой системы (включен драйвер, вы пишете только код пользовательского режима), который позволяет вам проверять и изменять содержимое запросов файловой системы. Пример шифрования включен.