gpt4 book ai didi

c# - 使用用户名和密码启动进程

转载 作者:太空狗 更新时间:2023-10-29 21:22:49 25 4
gpt4 key购买 nike

我知道您可以通过以下方式使用给定的用户名/密码运行进程:

var processInfo = new ProcessStartInfo
{
WorkingDirectory = workingDirectory,
FileName = "a name",
UserName = loggedUserName,
Password = "password",
Domain = userNameDomain,
UseShellExecute = false,
};
Process.Start(processInfo);

我面临的问题是我不想将实际密码写为代码的一部分,如果我将密码属性留空,进程将不会启动...我如何才能安全地启动在不将密码作为代码中的硬编码字符串公开的情况下进行处理?

最佳答案

ProcessStartInfo.Password不是您可以写下并分配给属性的简单字符串。你需要的是 SecureString实例和 SecureString 无法通过将简单字符串传递给其构造函数来创建。显然,操作系统没有 API 或方法允许不受信任的程序检索当前用户的密码(这将是有史以来最大的安全漏洞)。

因此,在我看来,您只有一个选择。要求您的用户再次输入密码,结果输入应转换为 SecureString

此示例是 I have seen here 字符串类的扩展方法

using System.Security;

// ...

public static SecureString ConvertToSecureString(this string password)
{
if (password == null)
throw new ArgumentNullException("password");

unsafe
{
fixed (char* passwordChars = password)
{
var securePassword = new SecureString(passwordChars, password.Length);
securePassword.MakeReadOnly();
return securePassword;
}
}
}

您可以使用它来转换您的用户输入的密码并启动该过程

using(frmGetPassword fgp = new frmGetPassword())
{
if(DialogResult.OK == fgp.ShowDialog())
{
SecureString ss = fgp.Password.ConvertToSecureString();
var processInfo = new ProcessStartInfo
{
WorkingDirectory = workingDirectory,
FileName = "a name",
UserName = loggedUserName,
Password = ss,
Domain = userNameDomain,
UseShellExecute = false,
};
Process.Start(processInfo);
}
}

关于c# - 使用用户名和密码启动进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17908993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com