C# :: Aufgabe #138

6 Lösungen Lösungen öffentlich

Console - ReadPassword Methode

Anfänger - C# von DrizZle - 15.06.2016 um 13:48 Uhr
Ihr kennt sicherlich die Einstellung für die TextBox in der Windows Form in der man den User Input sofort in ein belibigen Password Char umwandeln kann (in der Regel '*'). Diese Möglichkeit hat man in der Console nicht. Die Aufgabe besteht darin jeden Tastaturschlag des Users abzufangen und in ein '*' umzuwandeln und auszugeben. Sprich ihr erstellt eure eigene Read Methode. Das Passwort soll später trotz allem als Text ausgegeben werden können.
Vorlage:
Quellcode ausblenden C#-Code
class ReadPass
{
    static void main(string[] args)
	{
	    Console.Write("Passwort: ");
	    string password = ReadPassword();
	}
	string ReadPassword()
	{
	    ...
	}
}

Lösungen:

vote_ok
von daniel59 (4260 Punkte) - 21.07.2016 um 15:42 Uhr
Quellcode ausblenden C#-Code
using System;

namespace ConsoleReadPassword
{
    class Program
    {
        static void Main(string[] args)
        {
            string write = "Passwort: ";
            Console.Write(write);
            string password = ReadPassword(write);
            Console.WriteLine(password);
            Console.ReadLine();
        }

        static string ReadPassword(string lineBegin = "", char passwordChar = '*')
        {
            string line = null;
            while (true)
            {
                ConsoleKeyInfo key = Console.ReadKey();
                if (key.KeyChar == '\r' || key.KeyChar == '\n')
                {
                    Console.WriteLine();
                    return line;
                }
                else if (key.KeyChar == '\b')
                {
                    if (line.Length > 0)
                    { line = line.Substring(0, line.Length - 1); Console.Write('\0'); }
                }
                else if (key.KeyChar != '\0')
                {
                    line += key.KeyChar;
                }
                Console.Write('\r');
                Console.Write(lineBegin);
                Console.Write(new string(passwordChar, line.Length));
            }
        }
    }
}
2x
vote_ok
von Mexx (2370 Punkte) - 23.07.2016 um 01:56 Uhr
Quellcode ausblenden C#-Code
using System;

namespace ConsoleReadPasswort
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Bitte das Passwort eingeben");
            string pass = ReadPasswort();
            Console.Write(string.Format("\n\nDas eingegebene Passwort lautet \"{0}\"", pass));
            Console.ReadKey();
        }

        /// <summary>
        /// Maskiert die Konsoleneingabe gibt den eingegebenen Text zurück.
        /// Die Eingabe wird solange geselsen, bis die Enter Taste gedrückt wird.
        /// Fehlerkorrektur mit Backspace ist möglich.
        /// </summary>
        /// <returns>Das eingegebene Passwort</returns>
        static private string ReadPasswort()
        {
            string pw = string.Empty;
            ConsoleKeyInfo keyInfo;
            while ((keyInfo = Console.ReadKey(true)).Key != ConsoleKey.Enter)
            {
                if (keyInfo.Key == ConsoleKey.Backspace && pw.Length > 0)
                {
                    pw = pw.Substring(0, pw.Length - 1);
                    int pos = Console.CursorLeft;
                    Console.SetCursorPosition(pos - 1, Console.CursorTop);
                    Console.Write(" ");
                    Console.SetCursorPosition(pos - 1, Console.CursorTop);
                }
                if (keyInfo.Key != ConsoleKey.Backspace)
                {
                    pw += keyInfo.KeyChar;
                    Console.Write("*");
                }
            }
            Console.Write("\n");
            return pw;
        }
    }
}
vote_ok
von hollst (13980 Punkte) - 08.08.2016 um 13:41 Uhr
Quellcode ausblenden C#-Code
using System;

namespace ReadPassWord
{
    class Program
    {
        static void Main()
        {
            Console.Write("Passwort (Abschluss mit ENTER): ");
            String password = ReadPassword();

            Console.WriteLine();
            Console.WriteLine("Eingabe war: " + password);
            Console.ReadKey();
        }

        static string ReadPassword()
        {         
            String erg = String.Empty;
            do
            {
                ConsoleKeyInfo cki = Console.ReadKey(true);

                if (cki.Key != ConsoleKey.Enter)
                {
                    Console.Write("*");
                    erg += cki.KeyChar.ToString();
                }
                else
                    return erg;
            } 
            while (true);
        }
    }
}
vote_ok
von Frevert (100 Punkte) - 09.02.2017 um 17:02 Uhr
Quellcode ausblenden C#-Code
static void Main(string[] args)
        {
            PasswortConsole PC = new PasswortConsole();
            string passwort = PC.ReadPasswort();
            Console.WriteLine(passwort);
            Console.Read();
        }    

class PasswortConsole
    {
        public string ReadPasswort()
        {
            Console.WriteLine("Geben Sie ihr Passwort ein");
            string passwort = "";
            Boolean enter = false;
            while (!enter)
            {
                ConsoleKeyInfo key = Console.ReadKey();
                if (key.Key.Equals(ConsoleKey.Enter))
                    enter = true;
                else
                {
                    passwort += key.KeyChar;
                    Console.CursorLeft--;
                    Console.Write('*');
                }
            }
            Console.WriteLine("Möchten Sie ihr Passwort sehen?");
            if (Console.ReadLine().ToLower() == "ja")
                return passwort;
            else
                return "Sie möchten ihr Passwort nicht sehen.\nAufwiedersehen";
        }
    }
vote_ok
von JUnoS20 (200 Punkte) - 23.05.2017 um 10:37 Uhr
Quellcode ausblenden C#-Code
public void ReadPass()
        {
            Console.WriteLine("Bitte geben Sie ihr Passwort ein: ");
            var password = Console.ReadLine();
            
             if (password != null)
                {
                     char[] passwordArray = password.ToCharArray();
                     for (int i = 0; i < passwordArray.Length; i++)
                 {
                    Console.Write("*");
                 }
        }
            else
        {
                Console.WriteLine("Bitte geben Sie ein Password ein!");
        }

       Console.WriteLine("\nIhr eingegebenes Passwort war: {0}", password);        
}
vote_ok
von Exception (7090 Punkte) - 05.05.2018 um 13:13 Uhr
Quellcode ausblenden C#-Code
using System;

namespace ReadPassword
{
    class Program
    {
        static void Main(string[] args)
        {
            printLogo();
            Console.Write("> ");
            string password = readPassword();
            Console.Clear();
            printLogo();
            Console.WriteLine("> " + password);

            Console.ReadKey();
        }

        /// <summary>
        /// Ersetzt jede Eingabe durch ein Asterisks.
        /// Steuerzeichen werden ignoriert.
        /// Backspace und Enter bilden hierbei eine Ausnahme.
        /// Backspace: Löscht letztes Zeichen aus String, löscht letztes Asterisks.
        /// Enter: Wenn Enter gedrückt wird, so wird die Schleife verlassen, die Methode gibt das Passwort zurück.
        /// </summary>
        /// <returns>Passwort im Klartext</returns>
        static string readPassword()
        {
            bool enterPressed = false;
            string pwd = "";

            do
            {
                ConsoleKeyInfo consoleKeyInfo = Console.ReadKey();  // schnappe infos

                pwd += (consoleKeyInfo.KeyChar >= 32 && consoleKeyInfo.KeyChar <= 126) ? consoleKeyInfo.KeyChar.ToString() : "";    // füge jedes Zeichen hinzu welches im Wertebereich zwischen 32 und 126 liegt ("Space" - "~")
                                                                                                                                    // somit werden steuerzeichen ignoriert.
                Console.Write("\b"); // lösche letztes zeichen
                Console.Write("*");  // setze asterisks an diese stelle

                if (consoleKeyInfo.Key == ConsoleKey.Backspace) // Backspace gedrückt? Ja: Lösche letztes Zeichen
                {
                    pwd = pwd.Substring(0, pwd.Length - 1);
                    Console.Clear();
                    printLogo();
                    Console.Write("> ");
                    foreach (char c in pwd) { Console.Write("*"); }
                }
                else if((consoleKeyInfo.KeyChar < 32 || consoleKeyInfo.KeyChar > 126) && consoleKeyInfo.Key != ConsoleKey.Enter)    // lösche asterisks von zeichen wie zb escape 
                {
                    Console.Clear();
                    printLogo();
                    Console.Write("> ");
                    foreach (char c in pwd) { Console.Write("*"); }
                }
                else if(consoleKeyInfo.Key == ConsoleKey.Enter) // Enter gedrückt? Ja: Ende!
                {
                    enterPressed = true;
                }

            } while (!enterPressed);

            return pwd;
        }

        /// <summary>
        /// Gibt ein Logo aus.
        /// #Style :)
        /// </summary>
        static void printLogo()
        {
            Console.BackgroundColor = ConsoleColor.DarkRed;
            Console.WriteLine("                           ");
            Console.WriteLine("      Passworteingabe      ");
            Console.WriteLine("                           ");
            Console.BackgroundColor = ConsoleColor.Black;
        }
    }
}
1800769

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.