将C ++中的数据保存到用户无法访问的文件中?

时间:2012-01-05 16:46:45

标签: c++ file fstream

我正在尝试创建一个基本的登录,在C ++中创建帐户系统,其中基本上提示用户输入用户名和密码或创建一个新帐户。在创建新帐户的选项中,用户输入保存在文件中的一些详细信息,但我不希望该数据可编辑。有没有办法让这些数据无法访问?我的操作系统是Windows。

5 个答案:

答案 0 :(得分:2)

如果用户确实想要访问该文件,则无法阻止它们。 在大多数情况下,一个简单的答案是隐藏文件,通过更改其属性(在Windows上)或在名称前添加一个点(在Unix上)。

请参阅 http://msdn.microsoft.com/en-us/library/windows/desktop/aa365535(v=vs.85).aspx 用于设置隐藏属性。

答案 1 :(得分:1)

最简单但又不太安全的是写入二进制文件。

“正确”的方法可能是将数据写入二进制文件。

答案 2 :(得分:1)

使用双向加密算法,例如AES。然后,正如@Casey所说,将其写入二进制文件。

您还需要一个密钥来加密/解密数据,这意味着您的应用程序需要将密钥存储在您为应用程序提供的.exe.dll中。这个问题的关键在于,一个真正技术的用户,理论上可以使用二进制编辑器搜索.exe或.dll,并且可能只是找出密钥,但我猜这个用户的数量会非常少。< / p>

否则,您可以拥有云密钥库并从那里检索数据。

你应该从用C编写的互联网上获得相当多的AES库(它们通常是1个文件长),所以你应该使用它们而不是实现自己的。

编辑:重新阅读帖子时,如果验证需要您的秘密数据,那么您真正需要的是影子文件。 Unix系统维护一个/etc/shadow,它保存密码的MD5哈希(单向哈希)。因此,当用户下次输入密码时,您只需验证新密码的哈希是否与存储的哈希匹配。这种方法的优点是没有人能读取实际的密码。

答案 3 :(得分:1)

您可以模糊编写二进制文件的方式,为其创建校验和,将校验和附加到开头,中间或结尾,对其进行加密,然后在加密后再创建&amp;追加另一个校验和。如果所有校验和都不匹配,显然文件已被泄露。

虽然所有这些都不会阻止用户实际编辑文件,但是除了最坚定的用户之外,所有人都无法以任何有意义的方式编辑文件。

当然,如果编辑了一个文件,它就无法使用,但你甚至可以通过创建和存储奇偶校验文件等恢复信息来解决这个问题。

答案 4 :(得分:1)

您是否查看了备用数据流?基本上,最流行的文件系统上的文件可以是二维的。通常用户只使用零数据流,但文件系统可以支持并行数据流,但大多数人不知道存在这些数据流,所以他们永远不会被看到。事实上,大多数工具忽略了任何东西,但是流为零,因此他们甚至可能无法复制这些文件!

请参阅Alternate Data Streams

您可以将其与任何其他建议一起使用。