Маскирование ввода пароля с консоли: 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();