从控制台屏蔽密码输入: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");
    }
}

我得到一个空点异常...


答案 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

您将使用控制台

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

通过执行读口回显被禁用。此外,在验证密码后,最好覆盖数组中的任何值。

如果你从ide运行这个,它会失败,请参阅这个解释以获得一个完整的答案:解释


推荐