Как заблокировать показ моего пароля в командной строке, когда я ввожу его в свою программу Java

Итак, у меня есть это приложение, в котором я читаю пользовательский ввод из командной строки, и когда пользователь вводит свой пароль, я хотел бы скрыть его, чтобы все остальные не могли видеть это так:

Please enter your password below
this is password

Я хотел бы показать это так:

Please enter your password below
****************

Так есть ли способ сделать это в консольном приложении Java?


person The amateur programmer    schedule 26.11.2013    source источник
comment
@Dlotan Дубликат! Зачем? здесь много вопросов, может быть, этот парень не смог найти похожие вопросы на SO .. ты полицейский?   -  person Vinayak Pahalwan    schedule 26.11.2013


Ответы (2)


Взгляните на класс Console, у него readPassword()

Синтаксис:

public char[] readPassword(String fmt,Object... args)

Предоставляет отформатированное приглашение, затем считывает пароль или кодовую фразу из консоли с отключенным эхом.

Параметры:

fmt — строка формата, как описано в разделе Синтаксис строки формата для текста подсказки.

args — аргументы, на которые ссылаются спецификаторы формата в строке формата. Если аргументов больше, чем спецификаторов формата, дополнительные аргументы игнорируются. Максимальное количество аргументов ограничено максимальным размером массива Java, как определено в спецификации виртуальной машины Java.

Возвращает – массив символов, содержащий пароль или фразу-пароль, считанные с консоли, без каких-либо символов конца строки или null, если достигнут конец потока.

person Vinayak Pahalwan    schedule 26.11.2013
comment
Просто отформатировал ваш ответ для удобства чтения. - person An SO User; 26.11.2013
comment
@LittleChild нет проблем, ура - person Vinayak Pahalwan; 26.11.2013

Взято из ответа, указанного в комментарии:

import java.io.Console;
public class Main {

public void passwordExample() {        
    Console console = System.console();
    if (console == null) {
        System.out.println("Couldn't get Console instance");
        System.exit(0);
    }

    console.printf("Testing password%n");
    char passwordArray[] = console.readPassword("Enter your secret password: ");
    console.printf("Password entered was: %s%n", new String(passwordArray));

}

public static void main(String[] args) {
    new Main().passwordExample();
}
}  

Обратите внимание, что вы получаете char[], а не String. Это из соображений безопасности, и на SO есть еще один отличный ответ на эту же тему. Вы должны уничтожить это char[], перезаписав его после того, как ваша работа будет сделана. Strings могут оставаться в памяти дольше, пока сборщик мусора не соберет их, и это может представлять угрозу безопасности.

Запустите пример из командной строки, а не из IDE. Это может не сработать.

person An SO User    schedule 26.11.2013