2009-07-10 57 views
9

Estoy tratando de enmascarar una contraseña en Java. Sun Java ha sugerido una forma de enmascarar una contraseña de la siguiente manera.¿Cómo enmascarar una contraseña en Java 5?

Masking a password

Se utiliza una forma sencilla de hacer eso.

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

Pero este enfoque tiene varios inconvenientes.

  1. Si el usuario utiliza las teclas de flecha + eliminar teclas se revela la contraseña.

  2. Si el usuario presiona accidentalmente 2 teclas al mismo tiempo (velocidad de tipeo extremadamente alta), algunos caracteres no se enmascaran.

¿Ustedes piensan en alguna forma que pueda obtener un enmascaramiento correcto al 100%?

Respuesta

4

Ahora puede usar System.console();

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


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

java.io.Console solo está disponible en Java 6. Su pregunta indica que está utilizando Java 5. – piepera

1

Usando ciertas llamadas de sistema (en Windows y Unix) puede deshabilitar el eco de caracteres a la consola. Esto es lo que hace System.console(), pero también funciona en Java.

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

Si necesita un ejemplo de código, deje un comentario.

0

Con el JDK 6.0, tiene los orígenes Java de las clases, incluida la consola: acabo de verificar y esta clase solo tiene dependencias Java 5.0.

Por lo tanto, en su proyecto, puede crear una copia de esta clase de consola y luego usar el método readPassword. No lo intenté, pero debería funcionar.

+0

No es del todo cierto. El método echo() es un nativo método. – notnoop

Cuestiones relacionadas