Frage

Ich versuche, ein Passwort in Java zu maskieren. Sun Java hat einen Weg vorgeschlagen, ein Passwort Maske wie folgt.

Maskierung ein Passwort

Es verwendet eine einfache Möglichkeit, das zu tun.

public void run () {
  stop = true;
  while (stop) {
     System.out.print("\010*");
 try {
    Thread.currentThread().sleep(1);
     } catch(InterruptedException ie) {
        ie.printStackTrace();
     }
  }
}

Aber dieser Ansatz hat mehrere Nachteile.

  1. Wenn der Benutzer die Pfeiltasten verwendet + löschen Tasten das Passwort aufgedeckt wird.

  2. Wenn der Benutzer versehentlich drückt 2 Tasten gleichzeitig (Extrem hohe Tippgeschwindigkeit) hat einige Zeichen nicht maskiert erhalten.

Denken Sie, Jungs jeglicher Art und Weise, die eine 100% korrekte Maskierung zu bekommen?

War es hilfreich?

Lösung

Andere Tipps

Sie können nun System.Console ();

Console c = System.console();
if (c == null) {
    System.err.println("No console.");
    System.exit(1);
}


char [] password = c.readPassword("Enter your password: ");

Die Verwendung bestimmter syscalls (unter Windows und UNIX) Sie widerhallendes Zeichen deaktivieren zu trösten. Dies ist, was System.Console () tut, aber es funktioniert auch in Java.

Ich verwende JNA bestimmten syscall von Unix und Windows in einem eigenen Zweig der jline zur Karte:

Wenn Sie Codebeispiel einen Kommentar hinterlassen.

Mit dem JDK 6.0 haben Sie die Java-Sourcen der Klassen, Konsole mit: Ich habe überprüft und diese Klasse hat nur Java 5.0 Abhängigkeiten

.

Also, in Ihrem Projekt, können Sie eine Kopie dieser Console-Klasse erstellen und dann die readPassword Methode verwenden. Ich habe nicht versucht, aber es sollte funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top