Как замаскировать пароль в Java 5? - PullRequest
9 голосов
/ 10 июля 2009

Я пытаюсь замаскировать пароль в Java. Sun java предложила способ маскировки пароля следующим образом.

Маскировка пароля

Для этого используется простой способ.

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

Но у этого подхода есть несколько недостатков.

  1. Если пользователь использует клавиши со стрелками + клавиши удаления, пароль раскрывается.

  2. Если пользователь случайно нажал 2 клавиши одновременно (чрезвычайно высокая скорость набора текста), некоторые символы не маскируются.

Ребята, вы думаете, как можно получить 100% правильную маскировку?

Ответы [ 4 ]

10 голосов
/ 10 июля 2009

Использовать Console.readPassword () .

4 голосов
/ 10 июля 2009

Теперь вы можете использовать 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 голос
/ 10 июля 2009

Используя определенные системные вызовы (в Windows и Unix), вы можете отключить отображение символов в консоли. Это то, что делает System.console (), но работает и в Java.

Я использую JNA для сопоставления определенных системных вызовов unix и окон в частной ветке jline:

  • в Unix Я использую структуру termios и tcgetattr / tcsetattr
  • в окнах, которые я использую GetConsoleMode и SetConsoleMode .

Если вам нужен пример кода, оставьте комментарий.

0 голосов
/ 10 июля 2009

С JDK 6.0 у вас есть java-источники классов, включая Console: я только что проверил, и у этого класса есть только зависимости Java 5.0.

Итак, в своем проекте вы можете создать копию этого класса Console, а затем использовать метод readPassword. Я не пробовал, но должно работать.

...