Вопрос

Я пытаюсь замаскировать пароль на 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% правильную маскировку?

Это было полезно?

Решение

Другие советы

Теперь вы можете использовать Система.консоль();

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


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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top