web-dev-qa-db-ja.com

コンソールからのパスワード入力のマスキング: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が発生しています...

38
New Start

完全な例?このコードを実行します(注:この例は、System.console()メソッドがnullを返す可能性があるため、IDE内からではなく、コンソールで実行するのが最適です。)

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();
    }
}
57
bilash.saha

Console クラスを使用します

char[] password = console.readPassword("Enter password");  
Arrays.fill(password, ' ');

ReadPasswordを実行すると、エコーが無効になります。また、パスワードの検証後、配列内の値を上書きすることをお勧めします。

これをideから実行すると失敗します。詳細な回答については、この説明を参照してください。 説明済み

8
Woot4Moo
Console console = System.console();
String username = console.readLine("Username: ");
char[] password = console.readPassword("Password: ");
2
user1525941

Java文字配列(コンソールから読み取るパスワード文字など)を処理している場合、次のRubyコードを使用してJRuby文字列に変換できます。

# 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://stackoverflow.com/a/27628738/4390019 」および「 https://stackoverflow.com/a/27628756/4390019 」も参照してください

0
Daniel Huffman