Маскировка пароля в приложении Java CLI - PullRequest
3 голосов
/ 14 сентября 2011

Я сделал это небольшое приложение ATM на Java (CLI), и вначале я хочу иметь «Code:», а затем пользователь должен ввести его, а в моем приложении Java оно должно сказать что-то вроде String (или int?) код = 1234;и если это сработает, продолжайте, если не ошиблись, попробуйте еще раз, если неисправность 3 раза, остановите приложение.

Как бы это выглядело?Я часами гуглял после маскированных паролей и безуспешно пробовал разные типы кода.Я просто хочу что-то простое, которое преобразует строку в звездочку.

В настоящее время моя маскировка пароля выглядит следующим образом:

java.io.Console cons;
char[] passwd;

if ((cons = System.console()) != null && (passwd = cons.readPassword("[%s]", "Code:")) != null)

Однако я не могу (не знаю), как установитьпароль в коде.

Ответы [ 3 ]

5 голосов
/ 14 сентября 2011

Используйте метод readPassword класса java.io.Console.

В документации API класса Console есть пример, который показывает, как читать пароль из окна консоли безповторяя его в виде открытого текста.

edit

Майкл, этот код позволяет пользователю вводить ключевое слово в окне консоли без его отображения.После того, как пользователь это сделал, пароль сохраняется в переменной passwd.Кажется, что вы действительно хотите что-то совершенно другое: у вас есть другая программа, которая запрашивает пароль, и вы хотите, чтобы ваша программа автоматически вводила этот пароль.тогда вам не нужно использовать класс Console.Вы можете попробовать использовать класс java.awt.Robot для ввода нажатий клавиш в другом приложении (но я не уверен, что оно будет работать с окном консоли - попробуйте).

0 голосов
/ 14 сентября 2011

На этом сайте есть пример того, что вы пытаетесь сделать: http://download.oracle.com/javase/tutorial/essential/io/cl.html

Если быть точным, здесь это две дополнительные ссылки напохожие учебники.


Они отвечают на ваш вопрос?


Судя по вашим комментариям, возможно, вы не понимаете Javaсинтаксис точно.

Вы не можете написать:

char["mypassword"] passwd;

Я думаю, что вы имеете в виду вместо:

String str = "mypassword";
char[] passwd = str.toCharArray();

Обновление

Попробуйте этот код:

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

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

c.println("Password is:");
c.println(new String(passwd));
0 голосов
/ 14 сентября 2011

Взгляните на это солнце. Java статья ... в ней рассказывается о множестве различных способов сделать это.

В частности, показано, как использовать класс TextField AWT с методом setEchoChar(), а также метод, который запускает отдельный поток для удаления и замены набираемых символов в консольных приложениях.

...