C#为用户隐藏的设置

C#为用户隐藏的设置,c#,configuration-files,hidden,settings,C#,Configuration Files,Hidden,Settings,我想为用户获取并设置一些隐藏的应用程序设置。在本例中,这是两个令牌和两个正在被应用程序更改的令牌。但对于应用程序用户来说,这四项仍然是一个秘密 我在MSDN和这个论坛上找到了两种方法 使用.config文件。->这听起来不错,我可以更改其中的一些值。但我在发布后仍然看到一个纯文本文件 使用项目属性中的设置。->应该是吗?我读到警告说,这毕竟不是那么安全 很多网站都介绍了web服务器解决方案,而我只想拥有一个桌面解决方案 顺便说一句,这不是一个商业产品,我正在做一个爱好项目,从C#.net学习

我想为用户获取并设置一些隐藏的应用程序设置。在本例中,这是两个令牌和两个正在被应用程序更改的令牌。但对于应用程序用户来说,这四项仍然是一个秘密

我在MSDN和这个论坛上找到了两种方法

  • 使用.config文件。->这听起来不错,我可以更改其中的一些值。但我在发布后仍然看到一个纯文本文件
  • 使用项目属性中的设置。->应该是吗?我读到警告说,这毕竟不是那么安全
很多网站都介绍了web服务器解决方案,而我只想拥有一个桌面解决方案


顺便说一句,这不是一个商业产品,我正在做一个爱好项目,从C#.net学习更多信息。

如果应用程序需要更改这些文件,您需要在应用程序外部保留这些文件,以便下次启动应用程序时加载新设置

为此,您始终可以创建一个配置(或设置)文件,并将其隐藏在程序集的
System.IO.IsolatedStorage
文件中。这仍然是由用户编辑,但它有点痛苦找到-加上这将转移到漫游配置文件,以便设置跨机器使用

一些简单的方法可以帮助您开始:

IsolatedStorage.IsolatedStorageFile storage = IsolatedStorage.IsolatedStorageFile.GetUserStoreForAssembly();

string subdirectory = "SomeDirectory";
storage.CreateFile(System.IO.Path.Combine(subdirectory, "settings.config"));

设置的“存在性”需要保密,还是只需保密其值


如果是后者,我建议对保存到.config文件中的值进行加密。

加密“隐藏”设置,但仍将其保存到配置文件?可能是加密的方式,但几乎所有内容都可以反向工程。“设置”放在配置文件中。这里只有1个选项。MSDN写了关于IsolatedStorage的内容“不要使用独立存储存储高值机密,例如未加密的密钥或密码,因为独立存储不受高度信任代码、非托管代码或计算机受信任用户的保护。”我有一种感觉,微软不能保证一种安全的方式来存储一个秘密设置。NET和java总是有一个问题,就是像C++那样容易地反编译。隔离存储应该是对这些令牌保密的最佳方式。然后我必须将密码存储在某个地方。我更希望一些可配置的东西被组装成用户无法访问的代码。不管你把配置放在哪里,你的用户都可以反编译你的dll。告诉我们更多关于您的用例的信息?为什么设置需要“隐藏”?您所要求的基本上是您的程序有权访问的区域,但是您的程序所运行的权限所在的用户没有访问权限。你能看出这是怎么一个问题吗?在这种情况下,是来自OAuth的consumertoken。但情况就是这样。我想探索C#的可能性。当然,当您具备工具和技能时,编译成二进制或库的数据是可逆的。我想要的是让用户尽可能难以做到这一点。目前,我只发现它不是100%安全的,当您将数据存储在本地时,这是正确的,尤其是对于托管语言C#。但是什么是99%的安全,什么是50%的安全等等。我觉得MSDN网站对此不是很明确。.config是否比项目设置更不安全?有多种方法可以做到这一点,但正如所述,没有任何东西是100%安全的。如果不想在托管程序集中存储加密密钥,可以创建C++或其他DLL来为您进行加密/解密(不可能,但稍微难破解)。其他方法是,通过将值存储在web服务器上的某个位置(或用户无法访问的位置)并使用web服务读取这些值,用户无法直接修改这些值。在这种情况下,您甚至可以创建质询\响应,以便不存储密码