首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 控制台應用程式實作密碼輸入遮罩(星號顯示)完整教學

     編輯:關於C語言

前言

在開發 C# 控制台應用程式時,處理密碼輸入是常見需求。預設情況下 Console.ReadLine() 會直接顯示使用者輸入的明文,這對安全性敏感的場合顯然不合適。本文將詳細介紹如何利用 Console.ReadKey(true) 逐字元讀取輸入,並在螢幕上即時顯示星號(*)作為遮罩,同時正確處理 Backspace 刪除與 Enter 確認鍵。

核心原理

Console.ReadKey(bool intercept) 方法的多載版本允許我們攔截按鍵:當 intercept 為 true 時,按鍵不會在主控台顯示,游標保持原位。此時我們可以自行寫入星號,達到遮罩效果。方法回傳 ConsoleKeyInfo 結構,包含 Key(列舉型別,對應實體按鍵)與 KeyChar(對應的 Unicode 字元)兩個關鍵屬性,方便判斷特殊鍵與累加字元。

完整程式碼範例

using System;

class Program
{
    static void Main()
    {
        string input = null;
        Console.WriteLine("請輸入密碼:");

        while (true)
        {
            // 攔截按鍵,不在螢幕顯示原始字元
            ConsoleKeyInfo keyInfo = Console.ReadKey(true);

            // 判斷是否按下 Enter 鍵結束輸入
            if (keyInfo.Key != ConsoleKey.Enter)
            {
                // 處理 Backspace 刪除邏輯
                if (keyInfo.Key != ConsoleKey.Backspace)
                {
                    input += keyInfo.KeyChar; // 累加字元
                    Console.Write("*");       // 顯示遮罩星號
                }
                else if (input.Length > 0)
                {
                    // 移除最後一個字元並更新螢幕顯示
                    input = input.Substring(0, input.Length - 1);
                    Console.Write("\b \b");   // 退格、空格覆蓋、再退格
                }
            }
            else
            {
                Console.WriteLine(); // 換行
                break;
            }
        }

        Console.WriteLine($"您剛才輸入的是:{input}");
        Console.ReadKey();
    }
}

關鍵細節解析

  • Backspace 處理:使用 \b \b 三字元序列——第一個 \b 將游標左移,空格覆蓋原星號,第二個 \b 再次左移,使游標停在正確位置等待下一個輸入。
  • 空密碼防護:在 Backspace 判斷中加入 input.Length > 0,避免游標跑到提示文字前方。
  • 編碼相容性:KeyChar 自動處理 Unicode 字元,支援中文輸入法組合字元(需搭配 IME 狀態),一般英文數字密碼場景完全足夠。

執行效果展示

密碼輸入星號遮罩效果圖

延伸應用建議

實際專案中可將此邏輯封裝為 ReadPassword() 靜態方法,回傳 SecureString 型別以進一步強化記憶體安全性;若需支援密碼顯示/隱藏切換,可引入額外熱鍵(如 Tab)控制遮罩模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved