C# CF: шифрование/дешифрование файлов на лету

я видел много статей о шифровании/дешифровании файла, и обычно кнопка используется для выбора файла для шифрования и другая кнопка для расшифровки файла.

я видел некоторые приложения, такие как truecrypt и, возможно, другие, которые выполняют шифрование файлов на лету с прозрачным. это означает, что при щелчке зашифрованного файла для доступа он автоматически расшифрует и воспроизведет/откроет файл. затем, когда файл будет закрыт, он снова автоматически зашифруется.

некоторые говорят, что единственный способ обнаружить открытие файла - это фильтр файловой системы.

но есть ли другие способы сделать это в компактной среде С#?


person chrizonline    schedule 13.03.2010    source источник
comment
Теги и тема вводят в заблуждение. Кто-нибудь сказал.... Есть ли другой вопрос, на который вы ссылаетесь?   -  person tanascius    schedule 14.03.2010
comment
Исправил мою тему. Я спросил об обнаружении открытия файла, относящегося к этому вопросу, здесь [microsoft.com/communities/newsgroups/list /en-us/ но мне просто интересно, есть ли альтернативный способ обойти это.   -  person chrizonline    schedule 14.03.2010


Ответы (3)


Вы можете дать всем зашифрованным файлам определенное расширение файла, которое обрабатывается вашей программой расшифровки, тогда, когда пользователь открывает файл, ваша программа расшифровывает его, а затем открывает в правильном приложении.

person Nate Heinrich    schedule 13.03.2010
comment
Привет, Нейт, спасибо за подсказку. =) хм, я на самом деле пробовал это, но столкнулся с некоторыми проблемами. 1) см. здесь[stackoverflow.com/questions/2436295/ 2) еще один вопрос, который я хочу спросить, как открыть файл в программе С#? Я пробовал процедуру System.Diagnostics.Process, но она продолжала возвращать Win32Exception. 3) когда файл закрыт, как я могу обнаружить и зашифровать файл. - person chrizonline; 14.03.2010

Думаю, я понимаю ваш вопрос. Вы не контролируете программы, которые отображают файлы, вы хотите просто контролировать шифрование и дешифрование файлов за кулисами, даже если программа не знает, что это произошло (например, файл .docx будет зашифрован и расшифрован без ведома Word). . Я думаю, вам следует изучить WMI. Я специально не использовал его для проверки системных событий, связанных с извлечением или сохранением файлов, но я использовал его для очень эффективного подключения к системным событиям и запуска кода в определенное время. Вот ссылка MSDN:

Справочник по WMI

Я бы посмотрел на __Instance Events. Подобно классу __InstanceModificationEvent для событий сохранения файла в IO:

__InstanceModificationEvent Reference

Надеюсь, это выведет вас на правильный путь!

person Tim C    schedule 13.03.2010
comment
Привет, Тим, да, я хочу расшифровать / зашифровать файлы за сценой. однако WMI недоступен в Windows Mobile или CE. знак равно - person chrizonline; 14.03.2010

Я ответил на это в форуме MS. Вы должны написать фильтр файловой системы, filter можно написать только на C.

person ctacke    schedule 14.03.2010
comment
Привет, Крис, чтобы прикоснуться к фильтру файловой системы, нам понадобится встроенный Windows CE, верно? а значит и визуальная студия 2005 тоже нужна правильно? - person chrizonline; 14.03.2010
comment
Нет, вы можете написать фильтр с помощью Visual Studio 2005 или 2008 как проект C++ Smart Device. Вам не нужен Platform Builder (хотя он будет поставляться с образцом, поэтому стоит скачать версию eval для источника). - person ctacke; 15.03.2010
comment
есть образец я могу дл онлайн? Я попытался установить Windows Embedded CE 6.0 и выдал ошибку. Говорить, что сеть не может быть найдена, и в конечном итоге это закончится действием отката. - person chrizonline; 15.03.2010
comment
хм, хорошо, мне удалось заполучить образец. наконец-то установил сборщик платформ без ошибок - person chrizonline; 15.03.2010
comment
привет, Крис, у меня есть еще один вопрос. Я прочитал здесь =1]" rel="nofollow noreferrer">groups.google.com/group/microsoft.public.windowsce.embedded/ и они сказали, что FSD работает только на внешней карте памяти?? кажется, я должен изучить драйвер RAMDISK ?? - person chrizonline; 15.03.2010
comment
Привет, Крис, извини, но я немного потерялся. Хорошо, здесь идет: 1. Я полагаю, что нужно создать драйвер файловой системы и построить fsdspy.dll 2. Затем мне нужно будет загрузить fsdspy.dll в WM и отредактировать реестр, который указывает на этот файл. 3. Как после этого я могу использовать функцию fsdspy.dll из dot net CF? Однако я понимаю, что fsdspy.dll уже есть в HKEY_LOCAL_MACHINE\System\StorageManager\Filters\fsdspy. Так почему я должен создавать новый FSD? Могу ли я просто использовать существующий? - person chrizonline; 15.03.2010
comment
Я не уверен, как WinMo теперь монтирует корневое хранилище, поэтому я, честно говоря, не знаю, можете ли вы отфильтровать все на устройстве. Что касается использования, ваш драйвер должен будет раскрывать любые именованные системные события, которые вы перехватываете, или использовать какой-либо механизм для передачи данных, такой как IOCTL, очередь «точка-точка» или файл с отображением памяти. Понятия не имею, почему OEM-производитель включил fsdspy — вы захотите использовать свое собственное уникальное имя. Вы не можете использовать тот, который готов, потому что вам нужно добавить что-то, чтобы взаимодействовать с ним. - person ctacke; 15.03.2010
comment
спасибо Крис за разъяснение. однако я сомневаюсь, что смогу сделать FSD, поэтому я пришел сюда искать альтернативу. Мне нравится идея Нейта Генриха, но я просто беспокоюсь о закрытии файла. Одним из решений является сканирование таблицы системных процессов, определение закрытия файла и его шифрование. - person chrizonline; 15.03.2010
comment
привет, Крис, я столкнулся с некоторыми проблемами при запуске образца fsdspy, в основном у меня есть следующие файлы: sources, path.cpp, makefile, main.cpp, fsdspy.h, fsdspy.def, find.cpp, file.cpp я немного запутался используя Windows CE 6.0, поэтому я использую компилятор borland C++, чтобы попытаться создать файл dll. Я набираю это в командной строке, но это ничего не дает: make -f sources, что мне здесь не хватает? - person chrizonline; 17.03.2010
comment
файл make не предназначен для компилятора Borland. Либо попробуйте собрать его с помощью Platform Builder (сложный способ), либо просто создайте новый проект Smart Devcei C++, добавьте исходные файлы и скомпилируйте его таким образом (я бы выбрал именно этот путь). - person ctacke; 17.03.2010
comment
хм, я получаю ошибки, пока строю решение. я удалил stdafx.h, stdafx.cpp и файл cpp, который появился, когда я создал новые интеллектуальные устройства C++ для приложения dll. например, ошибка, которую я получаю: '#include fsdspy.h': пропускается при поиске предварительно скомпилированного заголовка, используйте c:\WM_Win32SmartDevice\WM_Win32SmartDevice\file.cpp; Ошибка 2, фатальная ошибка C1010: неожиданный конец файла при поиске предварительно скомпилированного заголовка. Вы забыли добавить '#include stdafx.h' в исходный код? c:\WM_Win32SmartDevice\WM_Win32SmartDevice\file.cpp 1279 WM_Win32SmartDevice - person chrizonline; 17.03.2010
comment
спасибо Крис. Это работает, но теперь я получаю сообщение об ошибке Не удается открыть включаемый файл: 'extfile.h': Нет такого файла или каталога в D:\Program Files\Windows Mobile 6 SDK\PocketPC\include\ARMV4I\fsdmgr.h - person chrizonline; 17.03.2010
comment
хм, хорошо, я добавил extfile.h из D:\Program Files\Windows Mobile 6 SDK\PocketPC\Include\Armv4i, и теперь он работает, но теперь у меня отсутствует lockmgr.h, есть ли какой-то общий каталог, который я должен добавить в исходный файл ? - person chrizonline; 17.03.2010
comment
в настоящее время мой исходный файл выглядит так: TARGETNAME=fsdspy RELEASETYPE=PLATFORM DLLENTRY=DllMain TARGETTYPE=DYNLINK INCLUDES= \ $(_TARGETPLATROOT)\src\inc WINCEOEM=1 TARGETLIBS=\ $(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\coredll .lib \ $(_PROJECTROOT)\cesysgen\oak\lib\$(_CPUINDPATH)\FSDMGR.LIB SOURCES=\ file.cpp \ main.cpp \ path.cpp \ find.cpp - person chrizonline; 17.03.2010
comment
Я знаю, где находится этот файл, но как мне сослаться на него из исходного файла? я скопировал папку COMMON в D:\Program Files\Windows Mobile 6 SDK\PocketPC\Include и сделал ссылку на нее из моего исходного файла: $(_TARGETPLATROOT)\src\inc\common\oak\inc; \ $(_TARGETPLATROOT)\src\inc\common\sdk\inc но все равно не получается - person chrizonline; 18.03.2010
comment
привет Крис, мне наконец удалось создать fsdspy.dll. теперь я хочу установить в мобильный телефон. Как я должен это делать?? - person chrizonline; 20.03.2010