C#:向用户询问密码,然后将其存储在SecureString中

在我正在为客户开发的小应用程序中,我需要向用户询问他的Windows登录用户名,密码和域,然后使用System.Diagnostics.Process.Start启动应用程序。

我有一个带有UseSystemPasswordChar的文本框来屏蔽输入的密码。

我需要一个System.Security.SecureString来将密码提供给System.Diagnostics.Process.Start

如何将输入的文本转换为安全字符串,而不是一个又一个字符? 或者:是否有更好的窗口控件要求用户输入密码,将输入的文本作为SecureString返回?

尝试查看SecurePasswordTextBox自定义控件。 您是否尝试执行类似于“运行方式”类型命令的操作,您尝试以与当前登录用户不同的用户身份运行该进程? 如果没有,您应该能够只调用Process.Start并让它获取当前用户凭据。

另外,请查看以下资源:

  • CredUIPromptForCredentials
  • CredUIPromptForWindowsCredentials (Vista和Server 2008)
  • Microsoft支持文章
  • LogonUserfunction
  • LogonUserExfunction
  • CreateProcessAsUser
  • CreateProcessWithLogonW
  • CreateProcessWithTokenW

最好的选择可能是使用一些interop p / inovke代码调用CredUIPromptForCredentials来显示标准Windows对话框,然后使用该信息调用Process.Start,或者更有可能调用CreateProcessAsUser函数。

SecureString一次想要接受一个字符的原因是否则在此之前你将拥有整个字符串并导致字符串在内存中。 因此,在这种情况下使用SecureString会破坏目的。