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.

Masking un mot de passe

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.

  1. Si l'utilisateur utilise les touches fléchées + SUPPR le mot de passe se révèle.

  2. 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%?

Était-ce utile?

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:

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top