如何在Qt中创建和装载卷

如何在Qt中创建和装载卷,qt,Qt,我的应用程序是一个连接到数据库服务器的客户端桌面应用程序。该应用程序是一个文档管理系统,允许用户将其文件(如.pdf.xlsx等)存储在数据库中,并跟踪文档的所有版本。用户可以“签入”和“签出”文档。当用户签出文件时,文件将从数据库下载并复制到用户的硬盘驱动器。然后,用户访问文件、编辑并签回数据库。在数据库内部,文件以压缩、加密和base64编码的形式存储在文本字段中 我的目标是确保在将文件复制到用户的硬盘驱动器时,对其进行加密,但仍允许用户轻松访问。可视化我想要的最好的方法是考虑TrueCry

我的应用程序是一个连接到数据库服务器的客户端桌面应用程序。该应用程序是一个文档管理系统,允许用户将其文件(如.pdf.xlsx等)存储在数据库中,并跟踪文档的所有版本。用户可以“签入”和“签出”文档。当用户签出文件时,文件将从数据库下载并复制到用户的硬盘驱动器。然后,用户访问文件、编辑并签回数据库。在数据库内部,文件以压缩、加密和base64编码的形式存储在文本字段中

我的目标是确保在将文件复制到用户的硬盘驱动器时,对其进行加密,但仍允许用户轻松访问。可视化我想要的最好的方法是考虑TrueCrypt如何工作——它允许用户创建加密的二进制文件,然后可以将其作为驱动器安装。例如,在Windows上,将为卷分配一个驱动器号,用户可以通过我的计算机访问这些文件

我的应用程序使用Botan库进行加密

有没有可能用Qt实现类似的功能?如果是,怎么做?如果没有,你有什么建议


非常感谢。

嗯,我认为您所说的非常合理,但在继续讨论技术细节和可能的解决方案之前,需要一些“核心设计”思想

据我所知,事情是这样的:

然后文件从文件系统传输到数据库,然后使用特定的算法对其进行加密。 一旦文件从数据库返回到文件系统,第三方软件就可以对其进行修改


这就是要点所在。。为什么需要在硬盘上进行加密?在进一步实施之前,我认为您应该详细说明您试图实现的目标。一旦第三方软件能够访问未加密的数据,它实际上意味着安装在操作系统上的所有其他软件都具有相同的访问级别。(在写这篇文章的时候,我想到了一些奇怪的配置,例如OpenOffice可以由您的应用程序在特定用户(linux)下运行,而存储文件的文件夹只能由所有者进行读/写访问,但我认为这可能会走得太远)。。无论如何问题是-你想阻止什么。。。我相信在提议的情况下,你们能想到的唯一一件事就是当硬盘被物理拔出时访问数据。。然后,根据操作系统的不同,我建议使用任何标准解决方案,如TrueCrypt,只需在linux上使用“mount”系统调用或在Win32上使用API(大多数解决方案都有API或命令行实用程序,您可以从应用程序中运行)。这很容易实现

这样做将需要基本上不可移植的低级驱动程序。非常辛苦的工作。正确地做那样的事情是一项艰巨的任务。只要一本书的封面正确,就需要一个答案。我甚至不确定这是不是一个真正好的进球。(就我个人而言,我不想让一个随机的应用程序对我的数据做一些自定义加密——很难验证它是否正确,如果它出错,只有你的肩膀可以依靠。与现有的、可靠的加密系统集成可能更明智。)我同意。我不想重新发明加密,也不想找一个库来为我做这些卷。我使用Botan将数据以加密的形式存储在数据库中,但在某种程度上,我希望用户能够访问数据。我的目的是继续使用Botan进行加密,但我确实希望硬盘上的文件始终加密。然后在问题中更详细地描述您的设置,并更具体地说明您遇到的确切问题。事实上,这两种方法都过于广泛,并且要求为库提供建议,这两种方法都不适合堆栈溢出。编辑以更详细地描述。我试图避免使用任何第三方应用程序,如TrueCrypt。我希望我的应用程序具有此功能。我试图实现的是,如果用户从数据库签出一个文件,他们应该可以离线访问它。但如果他们的笔记本电脑或其他东西被偷了,我想确保文件被加密,信息得到保护。我不太关心用户在使用文件时,哪些应用程序可以访问该文件-这是他们的责任。TrueCrypt或类似的应用程序是否有某种开发者SDK,我可以使用TrueCrypt API,但不能使用TrueCrypt用户界面?有些是,有些不是,TrueCrypt有一个命令行界面,对于您的任务来说应该已经足够了……这非常有趣,我将探索TC命令行。你能说出一个提供C或C++的库吗?