Pregunta

Estoy tratando de enmascarar una contraseña en Java. Sun Java ha sugerido una manera de enmascarar una contraseña de la siguiente manera.

enmascarar una contraseña

Se utiliza una forma sencilla de hacerlo.

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

Sin embargo, este enfoque tiene varios inconvenientes.

  1. Si el usuario utiliza las teclas de flecha + Delete la contraseña quede revelado.

  2. Si el usuario pulsa accidentalmente 2 teclas al mismo tiempo (extremadamente alta velocidad de escritura) algunos caracteres no quede enmascarado.

Qué piensan ustedes de cualquier manera que se puede conseguir un enmascaramiento correcta al 100%?

¿Fue útil?

Otros consejos

Ahora puede utilizar System.Console ();

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


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

El uso de ciertas llamadas al sistema (en Windows y UNIX) se puede desactivar eco de caracteres a la consola. Esto es lo que hace System.Console (), pero funciona también en Java.

Estoy usando JNA para mapear cierta llamada al sistema de Unix y Windows en una rama privada de jline:

Si necesitas ejemplo de código dejar un comentario.

Con el JDK 6.0, dispone de las fuentes de las clases de Java, incluida la consola: Sólo verificada y esta clase tiene sólo Java 5.0 dependencias

.

Así que, en su proyecto, puede crear una copia de esta clase de consola y, a continuación, utilizar el método readPassword. No he intentado pero debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top