Маскировка поля пароля в Java - PullRequest
       32

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

0 голосов
/ 22 сентября 2010

Я разрабатываю приложение командной строки Java, и мне нужно отобразить звездочку (*) или любой аналогичный знак, когда пользователь вводит пароль.Я пытался использовать метод replace (), но он принимает только один символ.Есть ли способ передать все буквы и цифры в качестве аргумента для этого метода замены.Или каков метод маскировки ввода suer.

Я не могу использовать здесь метод console.readPassword, потому что мне нужен пароль (введенный пользователем) в типе данных String.

Ответы [ 5 ]

4 голосов
/ 22 сентября 2010

На самом деле вы не можете использовать метод замены. Используя его, пользовательский ввод все еще виден, и вы меняете только то значение, которое вы сохранили в памяти.

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

char[] pwd = console.readPassword();
String str = new String(pwd);
2 голосов
/ 22 сентября 2010

Просто преобразуйте массив char в строку. Console.readPassword создан специально для вашего случая использования (чтение pwd: D).

Первоначально это char [], а не String, поскольку вы можете обнулить содержимое массива, и ваш пароль будет удален, в то время как String может объединиться и остаться в вашей памяти.

1 голос
/ 22 сентября 2010
0 голосов
/ 22 сентября 2010

Поскольку вы хотите выводить звездочки, вы не можете использовать console.readPassword. Вместо этого вы должны сделать это самостоятельно: отключить эхо, переключить вход в небуферизованный (по-буквенному, а не по строковому) режим, прочитать пароль символ за символом, напечатать звездочку для каждого прочитанного символа. Я предлагаю вам поискать подобную curses библиотеку для Java (их несколько, см. Какая хорошая Java-подобная библиотека для терминальных приложений? , для этой задачи.

0 голосов
/ 22 сентября 2010

Просто используйте console.readPassword(), а затем сделайте String из char[]:

String passWord = new String(chars);
...