繁体   English   中英

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

[英]Encrypt a string in C# Settings.settings

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

Settingsfile

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

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

选项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

我要问的第一件事 - 您是否需要在您的应用程序中拥有管理员密码? 如果答案是肯定的,那么这取决于你想做什么。 如果您需要使用密码,那么您可以使用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

C#中的哈希和盐密码

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM