LINUX.ORG.RU

Просмотр зашифрованного файла средствами операционки. Как бы вы решили эту проблему?

 , просмотрщики


0

1

Есть программа на Qt, которая хранит в зашифрованном виде различные файлы - картинки, doc/odt, pdf, чертежи, музыку, да мало ли что.

Задача: дать возможность пользователю (который знает пароль) просматривать эти файлы.

Проблема, как вы понимаете в том, что программа может расшифровать файл в какую-нибудь темповую директорию. Программа может установить на расшифрованный файл такие права, что просматривать сможет только текущий пользователь (сомнительная защита, ну да ладно). Программа может вызвать предназначенную в системе для работы с расшифрованным файлом программу, чтобы та показала содержимое файла пользователю.

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

Решение/методика должна быть кроссплатформенной, реализуемой на Linux, FreeBSD, Windows, MacOs, Android.

★★★★★
Ответ на: комментарий от Deleted

Я не ищу исполнителя, я обсуждаю возможные варианты решения, если таковые вообще есть.

Xintrea ★★★★★
() автор топика

Не надо вообще создавать файла на диске. Надо подавать содержимое просмотрщику на стандартный ввод, или какое-нибудь fifo и прочее GIGO.

Deleted
()
Ответ на: комментарий от Deleted

Не надо вообще создавать файла на диске. Надо подавать содержимое просмотрщику на стандартный ввод, или какое-нибудь fifo и прочее GIGO.

Как ты это будешь делать под виндой, где для просмотра *.doc настроен Microsoft Office, а для *.dxf-файлов Autocad и прочее?

Xintrea ★★★★★
() автор топика

Где хранит? Где-то на диске? Не проще ли просто описать метод шифрования и дать типовую шелловскую рабочую команду в качестве примера расшифровки?

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

nezamudich ★★
()
Ответ на: комментарий от nezamudich

Где хранит? Где-то на диске?

Да, на диске хранятся зашифрованные файлы.


Не проще ли просто описать метод шифрования и дать типовую шелловскую рабочую команду в качестве примера расшифровки?

Метод шифрования: http://webhamster.ru/site/page/index/articles/projectcode/157

Типовой команды нету, шифрация/дешифрация встроена в саму программу на Qt.


Но вопрос не в этом. Вопрос по-сути в том, что взаимодействие с просмотрщиками возможно только через файлы. Поэтому я не вижу никаких других возможностей, как только дешифрацию во временный файл. И как этот файл убрать после просмотра - непонятно.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Идеи стоят денег. Хорошие идеи — хороших денег.

Копираст, чтоли?

Идеи не стоят ничего, их вокруг как говна. Главное - реализация.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Через ActiveX например. Возможно, что некоторые приложения при таким раскладе поддерживают загрузку из памяти.

Amp ★★★
()

Как отследить, что файл больше не используется просмотрщиком?

Не знаю насчёт Mac и Android, но сильно сомневаюсь что в Windows/Linux/FreeBSD нет стандартных средств, которые могут сказать используется ли файл кем-то или нет.

Pinkbyte ★★★★★
()
Ответ на: комментарий от Amp

ActiveX
кроссплатформенной

Боюсь тут будет много-много боли :-)

Pinkbyte ★★★★★
()

средствами операционки
должна быть кроссплатформенной

/0




Ну, если ты не собираешься вязать портянки из #ifdef

Unicode4all ★★★★★
()
Ответ на: комментарий от Xintrea

Я хз как в винде, а в линуксе можно сразу удалить файл же.

Хотя я тут подумал ещё немного, и понял, что не совсем прав.

lsof, для оффтопика tasklist с какими-то параметрами (не помню точные) и грепать вывод. Но это костыль.

leave ★★★★★
()
Последнее исправление: leave (всего исправлений: 1)
Ответ на: комментарий от SystemD-hater

Анонимус одобряет

FUSE

И нефиг секретные файлы писать на диск.

anonymous
()

Cделай ramfs, расшифруй туда и удали сразу после открытия.

DonkeyHot ★★★★★
()

Насчёт кросплатформенного решения не подскажу, под офтопиком я делал так:

запускал программу-просмотрщик через ShellExecuteEx(), получал хэндл процесса, и ждал его завершения при помощи MsgWaitForMultipleObjects(). После этого удалял временный файл.

Beewek ★★★
()

Причем тут Qt вообще? Qt ничего подобного не предоставляет. Думаю, лучше всего монтировать зашифрованный файл через fuse, для винды есть dokan, для макоси OSXFUSE. Для андроида и фрибзд вроде тоже есть.

Как отследить, что файл больше не используется просмотрщиком?

lsof предоставляет такую инфу. Под винду надо отдельно думать, я с ней дела не имею. Короче, кроссплатформенного готового решения я не вижу. Можно попробовать подмонтировать файл через fuse, запустить просмотрщик и сразу же отмонтировать этот файл, но я не уверен что программе-просмотрщику такое понравится

SZT ★★★★★
()
Ответ на: комментарий от Beewek

запускал программу-просмотрщик через ShellExecuteEx(), получал хэндл процесса, и ждал его завершения при помощи MsgWaitForMultipleObjects().

Плохой метод. Допустим что просмотрщик это браузер. В запустившемся браузере пользователь открыл новую вкладку и залез в интернет, а изначальную вкладку, в которой просматривался секретный документ, закрыл. Процесс браузера остался, временный файл доступен, хотя его никто не просматривает

SZT ★★★★★
()

отдавая файл другой программе можно считать, что данные ушли из по контроля твоей программы
есть системы под венду типа secretnet, они внедряются сервисом, драйвером и пытаются это сделать
есть мсвс с её дискреционным и мандатным контролем
думаю без влезания в систему желаемое не осуществить, а тут могут быть иные проблемы )
решай задачу фиктивно, авось прокатит )

x905 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.