Come per mascherare una password in Java 5?
Domanda
Sto cercando di mascherare una password in Java. Sun Java ha suggerito un modo per mascherare una password come segue.
Si utilizza un modo semplice per farlo.
public void run () {
stop = true;
while (stop) {
System.out.print("\010*");
try {
Thread.currentThread().sleep(1);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
}
}
Ma questo approccio ha diversi svantaggi.
-
Se l'utente utilizza i tasti freccia + Delete la password viene rivelato.
-
Se l'utente preme il tasto 2 chiavi allo stesso tempo (estremamente alta velocità di battitura) alcuni caratteri non ottiene mascherati.
Do you guys pensare a un modo che può ottenere una corretta mascheratura 100%?
Soluzione
Altri suggerimenti
È ora possibile utilizzare System.Console ();
Console c = System.console();
if (c == null) {
System.err.println("No console.");
System.exit(1);
}
char [] password = c.readPassword("Enter your password: ");
Utilizzando alcune chiamate di sistema (su Windows e UNIX) è possibile disabilitare l'eco di caratteri da consolare. Questo è ciò che fa System.Console (), ma funziona anche in Java.
sto usando JNA per mappare alcune syscall di Unix e Windows in un ramo privato di jline:
- su UNIX sto usando il termios struttura e tcgetattr / tcsetattr
- su Windows che sto usando GetConsoleMode e SetConsoleMode .
Se avete bisogno di codice di esempio lasciare un commento.
Con il JDK 6.0, si hanno i sorgenti di Java delle classi, tra cui console: Ho appena verificato e questa classe ha solo Java 5.0 dipendenze
.Quindi, nel progetto, è possibile creare una copia di questa classe Console, e quindi utilizzare il metodo readpassword. Non ho provato, ma dovrebbe funzionare.