c# - 密码屏蔽控制台应用程序

标签 c# passwords console-application user-input masking

我试过下面的代码...

string pass = "";
Console.Write("Enter your password: ");
ConsoleKeyInfo key;

do
{
    key = Console.ReadKey(true);

    // Backspace Should Not Work
    if (key.Key != ConsoleKey.Backspace)
    {
        pass += key.KeyChar;
        Console.Write("*");
    }
    else
    {
        Console.Write("\b");
    }
}
// Stops Receving Keys Once Enter is Pressed
while (key.Key != ConsoleKey.Enter);

Console.WriteLine();
Console.WriteLine("The Password You entered is : " + pass);

但这种方式在输入密码时退格键功能不起作用。 有什么建议吗?

最佳答案

Console.Write("\b\b"); 将从屏幕上删除星号字符,但您的 else block 中没有任何代码从您的 pass 字符串变量中删除先前输入的字符。

下面是相关的工作代码,可以满足您的要求:

var pass = string.Empty;
ConsoleKey key;
do
{
    var keyInfo = Console.ReadKey(intercept: true);
    key = keyInfo.Key;

    if (key == ConsoleKey.Backspace && pass.Length > 0)
    {
        Console.Write("\b \b");
        pass = pass[0..^1];
    }
    else if (!char.IsControl(keyInfo.KeyChar))
    {
        Console.Write("*");
        pass += keyInfo.KeyChar;
    }
} while (key != ConsoleKey.Enter);

关于c# - 密码屏蔽控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3404421/

相关文章:

java - 使用 JSF 和 AJAX 存储用户/密码

mysql - 如何找出mysql数据库的用户名和密码

java - 控制台应用程序中基于选项卡的自动完成

c# - 为什么对外部数据源的更改没有反射(reflect)出来,而对内部数据源却显示出来了?

c# - MVC2 中的可选和命名参数、语言规范

c# - 如何在并行 foreach 中使用 await?

java - 从数据库中的记录匹配用户的密码

c# - 如何使用 C# 控制台在 Sharepoint 2010 中上传文件

c# - 如何避免多次重复类似的代码?

c# - 使用 IDisposable 资源进行屈服