Вопрос-ответ

Masking password input from the console : Java

Маскирующий ввод пароля с консоли: 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}"

Смотрите также "https://javalang.ru/a/27628738/4390019" и "https://javalang.ru/a/27628756/4390019"

java