如何使用特定于应用程序的密钥来encryption目录?

我正在处理一个C ++应用程序,它通过众多的类,数据库库等存储(并经常访问)它的数据跨单个目录中的许多文件。我想开始使用由pipe理的密钥在磁盘上encryption所有这些数据应用。

Windows上, 如果应用程序可以直接设置encryption密钥,而不是使用基于login用户密码的EFS,那么以编程方式启用该目录的EFS将是完美的。 这似乎不可能。

因为代码中有很多地方可以读取/写入文件,而有些地方是完全随机访问的,所以在没有直接的操作系统支持的情况下,导出类似于操作系统文件操作API的库是最简单的。

Windows是最大的用户群,但在Mac和Linux上可用的东西将是一大优势。

有什么build议么?

将应用程序配置为作为服务帐户运行,仅用于此目的。 然后,配置EFS。 由于应用程序的服务帐户将拥有这些文件,因此其用户特定的密钥应该是唯一有效的EFS密钥,因此只有应用程序(这将是运行在这个新的服务帐户下的唯一的东西)才能够访问这些文件。

您是否考虑过将文件存储在加密的存档文件中,例如压缩文件? 不知道你在做什么语言,很难给出更具体的答案。

我不是专家,但我有一些建议,
('用户'在这里被认为是男性)

在Windows中,当用户登录时,他将拥有操作属于他的文件或文件夹的所有权限。
但是,如果他试图操纵属于其他用户的文件或文件夹,则不允许这样做。 所以,他不能操纵其他用户的文件。
如果用户是管理员,他将拥有操纵文件的所有权利。
在你的情况下,我相信用户不是管理员。

所以, 我建议你:
为这个应用程序创建一个用户,说Bob(Bob不是将要使用这个应用程序的用户)。
然后,您创建一个文件夹来存储您的文件,并授予所有权限只有鲍勃(和管理员)。
对于所有其他人,没有权限对文件夹执行任何操作。
您的应用程序必须由管理员安装

当您开始时,您的应用程序会向当前用户询问Bob的密码。
如果密码正确,
使用您的应用程序允许当前用户具有完全访问文件夹权限。 然后应用程序可以按你的意愿工作。
如果用户退出应用程序,
删除当前用户的所有权限,以便在退出此应用程序后,其他用户无法访问该内容。
但是管理员仍然可以访问这个内容。

这与Linux用户管理类似。
当你得到一个shell时,你可以在完成工作时使用su username来改变用户,而他退出shell后,其他人就不能使用这些文件。 但root用户可以在Linux中做任何事情。

但是有一个问题
管理员可以获得完整的内容和访问权限,因为他可以修改权限。
要禁止这一点,请使用任何技术并使用密码来压缩文件。 该密码仅由使用该密码的用户所知。 在将文件保存到文件夹之前,请使用密码对其进行压缩。 使用该文件之前,使用密码解压缩。

如果压缩密码与用户密码相同,则存在问题。
管理员可以重置用户密码,并打开他的帐户。
为了防止这种情况,您可以使用以下技术:
使用zip密码作为用户密码的反向,以便如果他的密码是1234,则压缩密码是4321,或者使用用户密码的哈希值作为压缩密码。
如果邮政编码密码是MD5哈希值或SHA-1等哈希值,那么由于密码长度的原因,压缩文件上的强力文件将不起作用。
我不知道这是否是一个工作的解决方案,或者如果这可以实施或不。
但是,如果你认为在这方面有一些好的想法,你可以从中得到一些想法。

除非我错过了你的问题, TrueCrypt似乎是一个理想的解决方案。

它将允许:

  1. 利用现有的操作系​​统文件API(因为挂载的音量将像常规音量一样)
  2. 以编程方式管理访问密钥(密码)
  3. 限制对安装卷的访问(通过操作系统机制)
  4. 在所有平台(Windows,Mac,Linux)上使用相同的原则,

或者,如果你愿意,你可以使用它加密/解密单个文件。

有很多关于如何使用它的例子。