Маскирование ввода пароля с консоли: Java
Как скрыть пароль от ввода с консоли? Я использую Java 6.
Я пробовал использовать console.readPassword()
, но это не сработало. Полный пример может помочь мне на самом деле.
Здесь мой код:
import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test
{
public static void main(String[] args)
{
Console console = System.console();
console.printf("Please enter your username: ");
String username = console.readLine();
console.printf(username + "\n");
console.printf("Please enter your password: ");
char[] passwordChars = console.readPassword();
String passwordString = new String(passwordChars);
console.printf(passwordString + "\n");
}
}
Я получаю исключение NullPointerException...
Ответы
Ответ 1
Полный пример? Запустите этот код: (Примечание: этот пример лучше всего запускать в консоли, а не из среды IDE, поскольку метод System.console() в этом случае может вернуть значение null.)
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();
}
}
Ответ 2
Вы бы использовали Console класс
char[] password = console.readPassword("Enter password");
Arrays.fill(password, ' ');
Выполняя функцию readPassword, эхо-сигнал отключается. Также после проверки пароля лучше всего переписать любые значения в массиве.
Если вы запустите это из ide, это не удастся, пожалуйста, ознакомьтесь с этим объяснением для тщательного ответа: Разъяснение
Ответ 3
Console console = System.console();
String username = console.readLine("Username: ");
char[] password = console.readPassword("Password: ");
Ответ 4
Если вы имеете дело с символьным массивом Java (например, с символами пароля, которые вы читаете с консоли), вы можете преобразовать его в строку JRuby со следующим кодом Ruby:
# GIST: "pw_from_console.rb" under "https://gist.github.com/drhuffman12"
jconsole = Java::java.lang.System.console()
password = jconsole.readPassword()
ruby_string = ''
password.to_a.each {|c| ruby_string << c.chr}
# .. do something with 'password' variable ..
puts "password_chars: #{password_chars.inspect}"
puts "password_string: #{password_string}"
См. также "fooobar.com/questions/43468/..." и "fooobar.com/questions/43455/..."
Ответ 5
Данный код будет работать абсолютно нормально, если мы запустим его из консоли.
но вы должны убедиться, где у вас есть файл .class. потому что, если имя класса указано для класса, вы должны убедиться, что файл ".class" находится внутри указанной папки. Например, мое имя пакета "src.main.code", я должен создать папку с кодом, внутри главной папки, внутри папки src и поместить Test.class в папку с кодом. тогда это будет работать отлично.
Ответ 6
Ваш код верен, но в IDE ваш экземпляр консоли имеет значение NULL. Вы можете использовать класс сканера для решения проблемы.
Scanner scanner = new Scanner(System.in);
System.out.println("Please write your name:");
String name = scanner.nextLine();