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