Passwortmaskierungskonsole Anwendung
Habe ich versucht den folgenden code...
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);
Aber auf diese Weise die backspace-Funktionalität funktioniert nicht, während Sie das entsprechende Kennwort eingeben.
Jede Anregung?
InformationsquelleAutor der Frage Mohammad Nadeem | 2010-08-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Console.Write("\b \b");
wird, löschen Sie das Sternchen aus dem Bildschirm, aber Sie müssen nicht jeden code in Ihreelse
block, löscht das zuvor eingegebene Zeichen von Ihrempass
string-variable.Hier ist der relevante code-Teil (die
if..else
Abschnitt), sollte das tun, was Sie verlangen:InformationsquelleAutor der Antwort CraigTP
Für diese sollten Sie die System.Sicherheit.SecureString
InformationsquelleAutor der Antwort Damian Leszczyński - Vash
Komplette Lösung, Vanille C# .net 3.5+
Cut & Paste
🙂
InformationsquelleAutor der Antwort shermy
Unter die top-Antwort, sowie die Vorschläge von es Kommentare, und ändern Sie es verwenden, SecureString anstelle von String, test für alle Bedientasten und nicht Fehler an oder schreiben Sie eine extra "*" auf dem Bildschirm, wenn die Länge des Passworts ist 0, meine Lösung ist:
InformationsquelleAutor der Antwort MDMoore313
Mine ignoriert steuerzeichen und übernimmt den Zeilenumbruch:
InformationsquelleAutor der Antwort Ronnie Overby
Lesen-Konsole Eingang schwer ist, müssen Sie behandeln spezielle Tasten wie Strg, Alt, auch cursor-Tasten und Backspace/Löschen. Auf einige Tastatur-layouts, wie Schwedisch die Strg-Taste ist auch nötig, um die geben Sie Schlüssel, die vorhanden sind direkt auf US-Tastatur. Ich glaube, dass der Versuch, dies zu behandeln mit dem "low-level" -
Console.ReadKey(true)
ist nur sehr schwer, so ist der einfachste und stabilste Weg ist das deaktivieren der "console input echo" während der Eingabe von Passwort mit ein bisschen WINAPI.Das folgende Beispiel basiert auf Antworten zu Lesen Sie ein Kennwort aus std::cin Frage.
InformationsquelleAutor der Antwort Rafał Kłys
Ich habe einen Fehler gefunden in shermy die Vanille C# 3.5 .NET-Lösung, die sonst funktioniert einen Charme. Ich habe auch aufgenommen Damian Leszczyński - Vash - SecureString Idee hier, aber Sie können verwenden Sie eine gewöhnliche Zeichenkette, wenn Sie bevorzugen.
DEN FEHLER: Wenn Sie drücken Sie die Rücktaste, während die Eingabeaufforderung für das Kennwort und die aktuelle Länge des Passworts ist 0 dann ein Sternchen ist falsch eingefügt, in der Passwort-Maske. Um diesen Fehler zu beheben ändern Sie die folgende Methode.
InformationsquelleAutor der Antwort Stephen Wilson
Diese Maske das Passwort mit einem roten Quadrat, dann kehrt zurück zu den ursprünglichen Farben, sobald das Passwort eingegeben wurde.
Es nicht unterbinden, dass der Benutzer mithilfe von kopieren/einfügen, um das Passwort zu erhalten, aber wenn es mehr ist nur über die Einstellung jemanden, der über Ihre Schulter, dies ist eine gute schnelle Lösung.
InformationsquelleAutor der Antwort Rich S
Könnten Sie hängen Sie Ihre Schlüssel, um eine Anhäufung verlinkten Liste.
Wenn eine backspace-Taste empfangen wird, entfernen der letzten Taste aus der Liste.
Erhalten Sie die enter-Taste, blenden Sie Ihre Liste in einen string und tun den rest der Arbeit.
InformationsquelleAutor der Antwort sarnold
Ich habe ein paar änderungen für backspace
InformationsquelleAutor der Antwort user2346303
Habe ich aktualisiert Ronnie ' s version, nachdem viel zu viel Zeit versuchen, ein Passwort einzugeben, nur um herauszufinden, dass musste ich meine CAPS-LOCK auf!
Mit dieser version, was immer die Botschaft ist in
_CapsLockMessage
"Schwimmer" am Ende der Eingabe-Bereich und werden in rot angezeigt.Diese version braucht ein bisschen mehr code und erfordert eine polling-Schleife. Auf meinem computer die CPU-Auslastung etwa 3% bis 4%, aber man konnte immer fügen Sie eine kleine Sleep() Wert zu verringern der CPU-Auslastung, wenn nötig.
InformationsquelleAutor der Antwort Jim
Hier ist meine einfache version.
Jedes mal, wenn Sie eine Taste drücken, alle löschen, alle von der Konsole und ziehen so viele '*' als die Länge der Passwort-string ist.
InformationsquelleAutor der Antwort svicar
Wenn verstehe ich das richtig, Sie versuchen, machen Sie die Rücktaste, löschen Sie sowohl die sichtbaren Zeichen " * " auf dem Bildschirm, und die zwischengespeicherten Zeichen in Ihrem pass variable?
Wenn ja, dann ändern Sie einfach Ihre else-block:
InformationsquelleAutor der Antwort
InformationsquelleAutor der Antwort Neeraj Kumar