防止编辑文件

时间:2009-08-12 12:18:42

标签: c# certificate

防止文本文件(例如xml)被用户编辑的最明智的方法是什么? 我需要确保我存储用户名的文件和桌面应用程序的权限不能简单地编辑。

也许我可以生成文件的证书,桌面应用程序会检查这个吗?

我在WinForms应用程序中使用C#。

7 个答案:

答案 0 :(得分:2)

您可以使用文件系统权限来阻止编辑。

您可以使用加密来使编辑变得困难

您可以获取文件的哈希值以检测编辑。

我认为加密文件,然后解密它将是最简单的。尽管如果用户足够聪明,他们仍然可以阅读文件的内容。例如从内存中读取纯文本

答案 1 :(得分:1)

最简单的方法可能是使用带有用户名和密码验证的数据库。

最聪明的是加密它,以便数据不可用。

但是,如果用户真正想要访问其计算机上的文件,他们获取该文件。您可以将其设置为无法阅读任何有用的内容或进行有用的编辑,但如果他们愿意,他们将能够编辑该文件。

答案 2 :(得分:0)

由于您的目标是将用户权限直接存储在XML文件中,因此除了阻止用户编辑文件之外,还需要一定程度的安全性。即使你可以(假设)在操作系统级别对编辑文件施加一些限制,任何管理用户都可以在另一台计算机上编辑该文件,然后覆盖受保护的版本。

因此,您必须假设用户可以编辑该文件。你拥有的唯一办法就是能够确定他们何时拥有,并忽略他们的编辑。

您建议创建证书的方法听起来完全正确。你可以为整个文件计算一个哈希值,也可以在逐个用户的基础上(在你的上下文中哪个最有意义)计算哈希值,在任何一种情况下都使用私钥或密钥来确保编辑文件的人不能只需重新计算哈希。

答案 3 :(得分:0)

恕我直言,你无法保证没有人可以编辑它,但你可以加密文件以保护信息。

您不能保证任何人都可以使用磁盘启动来启动计算机,例如编辑文本文件。

答案 4 :(得分:0)

如果您必须将这些数据保存在XML文本文件中,您可以考虑每次修改时由应用程序对其进行数字签名,并在读取文件时检查数字签名。

有关如何sign XML file以及如何verify signature的详细信息。

但我认为最好只保留不同格式的数据 - 数据库,加密文件,应用程序属性......

答案 5 :(得分:0)

我个人认为在这种情况下,XML不是存储安全信息的合适格式。与二进制格式相比,XML的重点在于它是人类可读/可编辑的。使用某种带有已知散列/ crc的加密二进制格式,如果您想要完全安全,可以告诉您它是否受到干扰。

答案 6 :(得分:0)

您可以使用加密技术,但使用Windows内置的DPAPI,因为您还必须安全地存储加密密钥,这又是另一个麻烦。

使用DPAPI的好处在于它使用了用户或计算机独有的密钥,并且从未向程序员公开过!但是,如果您将文件移动到另一个用户的个人资料或计算机上,则该文件将无法读取。