我正在创建一个桌面应用程序,该应用程序将位于PC上,偶尔会检查Web服务器以获取各种设置的更新。
程序将经常使用这些设置,因此我希望将设置缓存在PC上的文件中,这样就不必经常访问服务器。有很多设置。我正考虑将它们存储在XML文件中,但我需要PC用户无法读取该文件。
如何在PC上存储程序可以读取和写入但用户无法读取的设置?
编辑:对不起伙计们。该应用程序是使用.NET 2.0在C#中编写的。该应用程序只能在Windows上运行。它是一个将作为Windows服务运行的控制台应用程序。答案 0 :(得分:3)
假设您的目标是Windows平台,您可以
如果需要,可以在所有3种情况下加密数据。如果你真的有很多设置,注册表可能不是最简单的方法。如果您有.net应用程序,请查看SQL Server Compact Edition,它非常轻巧,易于使用您的应用程序部署,并且不需要运行时环境。
答案 1 :(得分:2)
如果应用是服务,那么它可以在非用户的帐户下运行;然后很容易让文件隐藏起来。
作为Windows应用程序,您可以选择注册表或文件或本地数据库。对于文件,您可以选择简单的属性文件或XML文件。
对于其中任何一种,您选择加密(以防万一)或不加。
答案 2 :(得分:2)
如果它在最终用户的计算机上,迟早他们可以阅读它。如果程序在本地计算机上运行,那么他们可以使它做任何他们想做的事情。如果这是某种客户端 - 服务器程序,那么您根本无法信任客户端所说的内容。
在.Net中存储设置的最简单方法之一是创建一个包含您要跟踪的所有内容的类,然后将其序列化到磁盘或从磁盘序列化。由于此文件只是用作缓存,因此您可以使用二进制格式化程序,这将使文件只对那些知道它们正在做什么的人可读。
请务必将设置保存在UAC友好目录中,例如ApplicationData。
答案 3 :(得分:2)
你可以在像这样的xml中编写aplication配置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Test1" value="My value 1" />
<add key="Test2" value="Another value 2" />
</appSettings>
</configuration>
答案 4 :(得分:1)
您对xml配置的想法是一个良好的开端(XML DOM易于导航,众所周知,有文档记录等)。
如果您不希望用户能够读取/编辑设置,您可以将其保留在内存中,但是您将丢失从运行到运行的数据。您似乎没有表明该应用程序将重新启动,所以这可能适合您。还可以选择检测应用程序何时关闭,然后您可以将缓存转储到磁盘。
答案 5 :(得分:1)
无论您是否在本地存储这些设置,如果将它们加载到内存中,用户都可以读取它们。如果你通过网络传输它们,扫描网络数据包是非常简单的,即使是通过加密连接也有很多工具可以为你自己建立网络连接(我已经使用了OpenSTA) ,即使它不是完全为它做的)。如果你在他们的计算机上运行某些东西,真正想要看到你正在使用的设置的人将能够看到它们。
现在,已经说过,将它们保存在XML中并加密文件可能是最简单的解决方案。即使只是压缩文件并更改扩展名,也会让那些只是对您拥有的设置感到好奇的人远离。
答案 6 :(得分:1)
C#.net中的设置非常简单。可以通过项目的属性页面(“设置”选项卡)创建设置文件。然后,如果您真的想要,可以选择设置文件encrypt the root xml element either with symmetric or asymmetric keys
然后,正如其他人所提到的那样,保持用户手中编辑设置的键和例程是另一个问题。您可以将设置发送到存在私钥的服务器上,只保留客户端上的公钥进行解密,让服务器进行加密/签名。任何篡改您将知道的客户端设置,因为签名将失败。因此,如果您在本地保存了设置,则用户无法在没有一点代码的情况下读取它们,您只能解密它们才能使用它们;写作/创建将由服务器完成。
答案 7 :(得分:0)
您是否担心用户阅读或修改文件?
无论如何 - 您可以使用随机密钥加密它并将密钥埋在注册表中的某个位置