我正在使用 qt 开发一个项目,我需要永久保存数据(文件路径和密码),以便我可以随时获取或修改它,即使我退出我的应用程序并重新运行它。我想用加密的 xml 文件来解决它,但我想不留痕迹地做到这一点。
2 回答
当然不可能不留痕迹地在计算机上保存一些东西。一切都对 root 用户可见。
但是如果你不想让别人改变它,你可以加密它,隐藏它并设置它只读和root编辑权限。但不让任何人发现它是不可能的。(你是想制造病毒吗?)即使你把BIOS放进去,也有办法找到它。
您要么使用文件,要么使用其他特定于平台的数据库机制,例如 Windows 的注册表。但它会留下痕迹;您不能希望在本地存储某些内容并且在不对操作系统进行 rootkit 的情况下不留下痕迹(即使这样也会在硬件中留下痕迹,毕竟您正在将数据写入驱动器)。
您可以希望不留痕迹地做的一件事是通过网络将数据远程存储在某个服务器中,因为通常不记录网络活动(但可以观察到),但我可以看到这种方法存在两个问题:
1)这可能会给您的用户带来一些隐私问题(如果我是您的应用程序的用户,我不希望看到我的数据通过网络发送到未知服务器);
2)您如何识别信息以便检索它?您可以对用户名和计算机硬盘驱动器 ID 和网络接口 MAC 地址使用一些哈希,但如果其中一些更改,数据将会丢失。您还可以为应用程序的每次安装生成一个唯一的 id,但这需要您在本地存储该 ID,这将是一个 trace。
防止读取/篡改数据的本地加密本质上是不安全的,因为您需要有一些可重复的方法来检索密钥。你会怎么做?如果您只是在应用程序中对其进行硬编码,则可以通过一些二进制文件阅读器轻松检索它。由于显而易见的原因,它不能位于名为“key.txt”的文件中。您可以在运行时使用一些复杂的算法来计算它,但是您总是需要在某个时间点将它加载到内存中,以便有人愿意从那里检索它。