Comment masquer un mot de passe en Java 5?
Question
Je suis en train de masquer un mot de passe en Java. java Sun a suggéré un moyen de masquer un mot de passe comme suit.
Il utilise un moyen simple de le faire.
public void run () {
stop = true;
while (stop) {
System.out.print("\010*");
try {
Thread.currentThread().sleep(1);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
}
}
Mais cette approche présente plusieurs inconvénients.
-
Si l'utilisateur utilise les touches fléchées + SUPPR le mot de passe se révèle.
-
Si l'utilisateur d'appuyer accidentellement sur 2 touches en même temps (très grande vitesse de frappe) certains caractères ne sont pas masqués.
les gars pensez-vous de quelque façon que ce qui peut obtenir un masquage correct à 100%?
La solution
Autres conseils
Vous pouvez maintenant utiliser System.Console ();
Console c = System.console();
if (c == null) {
System.err.println("No console.");
System.exit(1);
}
char [] password = c.readPassword("Enter your password: ");
L'utilisation de certains syscalls (sur les fenêtres et unix), vous pouvez désactiver des caractères faisant écho à la console. C'est ce que System.Console () fait, mais cela fonctionne aussi en Java.
J'utilise la JNA pour cartographier certaines syscall des fenêtres et unix dans une branche privée de JLine:
- sur unix J'utilise le termios structure et tcgetattr / tcsetattr
- sur les fenêtres que je utilise GetConsoleMode et SetConsoleMode .
Si vous avez besoin exemple de code laisser un commentaire.
Avec le JDK 6.0, vous avez les sources Java des classes, y compris la console: Je viens de vérifier et de cette classe ne dispose que de dépendances Java 5.0
.Alors, dans votre projet, vous pouvez créer une copie de cette classe de la console, puis utilisez la méthode readpassword. Je n'ai pas essayé, mais cela devrait fonctionner.