在代码中输入密码的方法

我有一些代码需要使用提升的权限运行(更多我希望我的其余代码运行)。

我有我的代码设置模拟工作,但它需要用户名,域名和密码。 由于我的代码在C#.net中,我知道密码可以由任何足够坚定的人找到。

有没有办法在我的代码中加密密码? 或者以其他方式保护此密码并仍然可以将其传递?

这是我要调用的代码:

using (new Impersonator("UserNameGoesHere", "DomainNameGoesGere", "Password Goes Here")) { uint output; NetUserAdd(AUTHENTICATION_SERVER, 1, ref userinfo, out output); return output; } 

我想要一个示例,说明如何解决此问题,以便不以纯文本显示我的密码。

我正在使用Visual Studio 2008,.NET 3.5 SP1,并在Windows Server 2003上运行。

您没有指定这是桌面应用程序还是Web应用程序…

ASP.NET 2.0支持加密web.config的各个部分。

你能使用CryptoAPI吗? 看到接受的答案:

如何在Winforms应用程序中存储密码?

Vaccano,

我建议您调查数据保护API(DPAPI)以了解您正在尝试实现的目标。 在可逆地存储应用程序所需的密码的许多最佳实践方法中,它被认为是解决方案的一部分。

可以在这里找到一篇讨论DPAPI(和其他技术+关注点)的好文章:

http://msdn.microsoft.com/en-us/magazine/cc164054.aspx

使用C#2.0,甚至不需要P / Invoking; 托管包装器存在:

http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=41ca5a99-ddc0-4d0a-9919-2ce10bf50c7e

我希望这有帮助!

你有多种选择。

  1. 您可以第一次散列密码并将散列存储到文件中。 现在,下一次,您希望使用提升的权限执行代码,您需要接受/重新键入密码并重新计算哈希值并将其与存储的哈希值匹配。 只有匹配时才会在高程模式下执行代码。 您可以使用SHA进行哈希。 有关散列的示例,请查看System.Crytography命名空间。

  2. 第二种选择是使用AES等算法加密密码。 但是,您需要有一个密钥来执行此操作,您将不得不担心保护此密钥。

  3. 第三种选择是使用DPAPI并加密密码,但不担心保护密钥 – 比2更容易。

如果您不介意每次应用程序启动时重新输入密码,我建议使用1。 如果这不可能,我建议使用3并使用DPAPI。

以下是一些可以帮助您入门的链接。

1. http://www.obviex.com/samples/dpapi.aspx 2. http://www.obviex.com/samples/Encryption.aspx

您可以使用safe-config nuget包。 在内部,它使用数据保护API来加密和解密数据。

 //Save some configuration data at folder data\temp\ var configManager = new ConfigManager() .WithOptions(DataProtectionScope.CurrentUser) .Set("password", "my-massword") .AtFolder(@"data\temp\") .Save(); ... //Load configuration data var loadedValue = new ConfigManager() .AtFolder(@"data\temp\") .Load() .Get("password");