在C#Settings.settings中加密字符串

时间:2013-06-03 14:29:55

标签: c# string encryption save settings

我有一个密码,我保存在Settings.settings文件

Settingsfile

因为它是密码,我需要加密它。

我的可能性是什么,我怎样才能完成这项任务? 是否可以加密字符串,以及如何解密它?

3 个答案:

答案 0 :(得分:2)

选项1:您可以保护使用SectionInformation.ProtectSection加密它,或者如果它是ASP.NET应用程序,您可以使用aspnet_regiis加密它,iirc aspnet_regiis使用 ProtectSection 理论上,如果你想在常规应用程序上,你可以在命令行中使用它。可以像下面这样做,以清除msdn文章中的所有cluttter

// you will need to add ref to System.Configuration
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// Get the section.
UrlsSection section = (UrlsSection)config.GetSection("MyUrls");


// Protect (encrypt)the section.
section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");

config.Save(ConfigurationSaveMode.Full);

选项2:编写自己的加密解密机制,查看System.Security.Cryptography以了解如何执行此操作

选项3:使用ProtectData(来自System.Security.Cryptography)类使用特定于用户或机器的加密进行加密。这很简单,就像这样。

byte[] aditionalEntropy = {9, 8, 7, 6, 5};
byte[] secret = {0, 1, 2, 3, 4, 1, 2, 3, 4};

byte[] protectedBytes = ProtectedData.Protect(secret, aditionalEntropy, DataProtectionScope.CurrentUser);
byte[] originalSecret = ProtectedData.Unprotect(protectedBytes, aditionalEntropy, DataProtectionScope.CurrentUser);

请注意,方法#1使用机器密钥进行加密,因此只能在加密的机器上回读,因此可以在同一台计算机上运行应用程序的任何用户回读。方法#3基于用户密钥(并且特定于机器iirc),因此是最严格的。如果您想在一台计算机上加密并使其在不同的计算机上可读,则需要使用选项2

答案 1 :(得分:1)

我要问的第一件事 - 您需要在您的应用程序中拥有管理员密码吗?如果答案是肯定的,那么这取决于你想做什么。如果您需要使用密码,那么您可以使用aspnet_regiis加密配置文件的各个部分,并能够再次恢复它们。

http://msdn.microsoft.com/en-us/library/k6h9cz8h(v=vs.80).aspx

如果永远不会使用密码,即您只是希望有人以管理员身份登录,并且您想检查密码是否正确,那么最好的方法是使用salting,这基本上是单向加密这意味着没有人可以恢复您的密码。当您进行身份验证时,只需重复该过程并根据您的盐渍密码验证结果

http://en.wikipedia.org/wiki/Salt_(cryptography)

http://www.symantec.com/connect/blogs/would-you-care-some-salt-your-password

Hash and salt passwords in C#

答案 2 :(得分:1)

可以加密密码,但你的代码需要拥有内置的解密密钥。所以它不是很安全。任何反汇编代码的人在获得密码之前都需要额外一步。

您可能最好使用AD服务帐户或为此目的设计的其他安全机制。安全很难;除非你绝对必须,否则不要自己动手!