C# :: Aufgabe #138
6 Lösungen

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:
C#-Code
Vorlage:

class ReadPass { static void main(string[] args) { Console.Write("Passwort: "); string password = ReadPassword(); } string ReadPassword() { ... } }
Lösungen:

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)); } } } }

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; } } }

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); } } }

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"; } }

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); }

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; } } }