Encryption 安全地使用加密文件

Encryption 安全地使用加密文件,encryption,temporary-files,file-security,Encryption,Temporary Files,File Security,我正在用BorlandDelphi7编写一个带有dBASE数据库文件的应用程序 注意:我认为这个问题与文件安全有关,在这个问题中,您可以忘记dBASE(将其视为TXT文件) 数据库必须仅由应用程序访问。那么它必须被加密。不幸的是,dBASE不支持任何密码机制,我必须自己加密文件(我还必须使用dBASE) 您建议采用什么方法来保护数据库文件 简单的一点是: 加密数据库文件并将其放在应用程序EXE文件旁边 当应用程序运行时,它应该解密文件(使用硬编码密码),并将结果复制到具有DeleteOnClos

我正在用BorlandDelphi7编写一个带有dBASE数据库文件的应用程序

注意:我认为这个问题与文件安全有关,在这个问题中,您可以忘记dBASE(将其视为TXT文件)

数据库必须仅由应用程序访问。那么它必须被加密。不幸的是,dBASE不支持任何密码机制,我必须自己加密文件(我还必须使用dBASE)

您建议采用什么方法来保护数据库文件

简单的一点是:

  • 加密数据库文件并将其放在应用程序EXE文件旁边
  • 当应用程序运行时,它应该解密文件(使用硬编码密码),并将结果复制到具有
    DeleteOnClose
    NoSharingPermission
    标志的临时文件中
  • 关闭时,应用程序应加密临时数据库文件,并用新文件替换旧的加密文件
  • 我认为这是一个相当安全的方法。但它有两大问题:

  • 使用取消删除工具,用户可以恢复和访问已删除的临时文件
  • 更糟糕的是:当应用程序运行时,如果系统突然重新启动,
    DeleteOnClose
    标志失败,临时文件仍保留在硬盘上,用户可以访问它
  • 至少第二部分有什么解决办法吗


    还有其他解决方案吗?

    根据您对数据库的操作,您可能只需要解密实际需要的记录就可以了。例如,您可以基于散列码(而不是真实数据)构建索引;这将把数据库中的数据减少到一个较小的数据集。子集中的每个记录都必须解密,但这可能比解密整个数据库要好得多。

    您还可以尝试创建一个基于文件的容器,装载它,然后将数据库文件放入装载的加密卷中。TrueCrypt是免费的(在两种意义上都是免费的),并且可以通过您的应用程序访问它(启动前装载,退出前卸载)。

    一个很长的机会:您可以创建一个RAM驱动器并将解密的数据文件放在其中吗?只要您硬编码密码,就根本没有安全的解决方案。您必须让您的用户选择密码,这样您就不必将其存储在任何地方。@Mef:我不是在寻找一个非常强大的解决方案。密码将由硬编码字符串动态生成,要找到正确的密码并不容易。@Ruben-如何创建这样的驱动器?其他用户可以从Windows资源管理器访问它吗?