3

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

设置文件

并且由于它是密码,因此我需要对其进行加密。

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

4

3 回答 3

2

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

您最好使用 AD 服务帐户或为此目的设计的其他一些安全机制。安全很难;除非万不得已,否则不要自己动手!

于 2013-06-03T14:55:37.300 回答
2

选项 1:您可以保护使用SectionInformation.ProtectSection对其进行加密,或者如果它是一个 ASP.NET 应用程序,您可以使用 aspnet_regiis 对其进行加密,iirc aspnet_regiis 在幕后使用ProtectSection,因此理论上您可以根据需要在命令行中使用它在常规应用程序上。可以像下面这样完成,以清除 msdn 文章中的所有混乱

// 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

于 2013-06-03T15:09:24.867 回答
1

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

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

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

http://en.wikipedia.org/wiki/Salt_(密码学)

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

C# 中的哈希和盐密码

于 2013-06-03T14:41:55.387 回答