【问题标题】:Prevent user from editing text file when the program is closed程序关闭时防止用户编辑文本文件
【发布时间】:2014-04-13 12:34:00
【问题描述】:

我需要编写一个处理简单数据库的程序。我的目标是简单地将内存中的所有数据写入 .txt,然后在程序开始时将其全部读取。我希望能够防止用户在程序之外编辑 txt 文件。

需要考虑的一些事项: - 我希望这个解决方案是可移植的(不是多平台,只是在 Windows 上,但我不想要任何我必须手动设置或额外依赖软件的安全设置) - 预防的方法不需要太极端,只要打开txt随意编辑就可以了。

我目前的计划是: - 我想用程序在读/写时内置的密码来屏蔽数据,因此在维护密钥的同时难以轻松编辑。 - 我将在读取时间进行数据验证,以确认密码密钥以及数据的合法性。

我的问题: - 用户可以打开txt并将一个值更改为另一个合法数据

我想要什么: - 一些互斥锁,如 windows api 将支持的锁定功能,我可以以可移植方式(在 windows 平台内)编码,只要用户具有可重新分发的可视 c++ 即可运行。 (但我会寻求帮助)

感谢您的阅读,我希望看到一些意见:)

编辑:

我想知道,由于 Windows 平台默认支持 zip,是否有写入 .zip 容器的方法,该容器可以在创建 .zip 时加密,然后使用密钥在程序中访问?如果可行,我认为这将是一个理想的解决方案

【问题讨论】:

  • 'windows api 支持的一些互斥锁之类的锁定功能......'恐怕没有这样的神奇可用的东西。跨度>
  • 您唯一的选择是基于某种加密。一种选择(不会使内容不可读)是在文件中包含用于验证内容未更改的数字签名。但问题转移到:签名(或加密)密钥存储在哪里?
  • @user3483187:你为什么要这么做?如果用户更改文件并破坏程序功能,那是他自己的错。
  • hmm 我想没有神奇的伟大之处 :( 那是最初的计划,我正在考虑将“密码”或数字签名硬编码到程序中。我不担心有人解密我的签名或类似的东西,我只是不希望编辑变得微不足道。我很欣赏它是一个不错的前进方向的保证。我很可能会这样做,然后每个字段读入,如果修改将被默认并通知用户修改后的数据库。这也是一个学校项目,所以我想把它做得很好:)
  • 这是一种“俗气”的方式,不会阻止所有人。更改文件类型扩展名。将其命名为 .ful 而不是 .txt 或类似名称。将文件标记为隐藏。除非最终用户真的知道要查找什么,否则他们不会知道它有错误的扩展名。当然,这不是一种安全的方法,也不是最佳实践。

标签: c++ windows data-protection


【解决方案1】:

我不确定这是否可能,所以我的建议是加密您要存储在 .txt 文件中的数据。

以下是一个简单的异或加密算法,如果要解密数据,只需将加密后的字符串再次运行该方法即可。

std::string crypt(std::string str, char key) { // If you want to, you can apply proper const-ness
    std::string result = str; // Create a result string
    for (int i = 0; i < result.size(); i++) result[i] = str[i] ^ key; // For every character in the string XOR it with the key
    return result; // Return the result
}

我希望这对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多