围绕把代码输入密码的方式(Ways around putting a password in cod

2019-06-27 10:57发布

我有一些代码,需要更高权限运行(更多的,我想在运行我的代码的其余部分)。

我有我的代码,用于建立模拟工作,但它需要一个用户名,域名和密码。 由于我的代码是用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上运行。

Answer 1:

你没有指定这是否是一个桌面或Web应用程序,所以...

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



Answer 2:

您可以使用CryptoAPIs? 见接受的答案:

如何存储在WinForms应用程序的密码?



Answer 3:

Vaccano,

我会建议调查你正在试图达到什么样的数据保护API(DPAPI)。 它被认为是在许多最佳实践解决方案的一部分接近可逆存储由应用程序所需要的密码。

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

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

用C#2.0,P /调用甚至不要求; 托管的包装存在:

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

我希望这有帮助!



Answer 4:

在这里,你有多种选择。

  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



Answer 5:

您可以使用安全,配置 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<string>("password");


文章来源: Ways around putting a password in code