【问题标题】:C#: Ask User for a Password which is then stored in a SecureStringC#:向用户询问密码,然后将密码存储在 SecureString 中
【发布时间】:2010-09-23 23:27:13
【问题描述】:

在我目前正在为客户开发的小型应用程序中,我需要询问用户他的 Windows 登录用户名、密码和域,然后将这些与 System.Diagnostics.Process.Start 一起使用启动应用程序。

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

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

如何将输入的文本转换为安全字符串,而不是一个接一个地执行?或者:是否有更好的窗口控件来询问用户输入的密码以将输入的文本作为 SecureString 返回?

【问题讨论】:

    标签: c# .net passwords securestring


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      另外,请查看以下资源:

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

      【讨论】:

      • 这正是客户想要的:一个简约的程序,允许用户在其用户上下文中启动应用程序,而无需注销当前登录的用户。
      • 难道他们不能只是右移右击应用程序并选择“运行为..”吗?
      • @John:据我所知,“运行方式...”不再存在于 Vista 中。您只有一个“以管理员身份运行”选项。
      • @John:只要他们付钱给我,我不在乎他们能做什么或不能做什么:)
      猜你喜欢
      • 2012-04-10
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      相关资源
      最近更新 更多