Pergunta

Eu estou tentando mascarar uma senha em Java. java Sun sugeriu uma maneira de mascarar a senha da seguinte maneira.

Masking uma senha

Ele usa uma maneira simples de fazer isso.

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

Mas esta abordagem tem vários inconvenientes.

  1. Se o usuário usa as teclas de setas + teclas de excluir a senha é revelado.

  2. Se o usuário pressionar acidentalmente 2 teclas ao mesmo tempo (Extremamente alta velocidade de digitação) alguns caracteres não fica mascarado.

Do que vocês pensam de qualquer forma que pode obter uma máscara correta de 100%?

Foi útil?

Outras dicas

Agora você pode 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: ");

O uso de determinados syscalls (no Windows e UNIX), você pode desativar ecoando de caracteres para console. Isto é o que System.Console () faz, mas também funciona em Java.

Eu estou usando JNA para mapear certa syscall de Unix e Windows em um ramo particular de jline:

Se precisar exemplo de código deixar um comentário.

Com o JDK 6.0, você tem as fontes de java das classes, incluindo Console: Eu apenas verificado e esta classe tem apenas Java 5.0 dependências

.

Assim, em seu projeto, você pode criar uma cópia desta classe Console e, em seguida, usar o método readpassword. Eu não tentei, mas ele deve funcionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top