从控制台屏蔽密码输入:java

8i9zcol2  于 2021-07-06  发布在  Java
关注(0)|答案(5)|浏览(434)

如何从控制台输入屏蔽密码?我用的是Java6。
我试过用 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。。。

sgtfey8w

sgtfey8w1#

如果要处理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"

rqcrx0a6

rqcrx0a62#

一个完整的例子?。运行以下代码:(注意:这个示例最好在控制台中运行,而不是从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();
    }
}
yvgpqqbh

yvgpqqbh3#

您将使用console类

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

通过执行readpassword,将禁用回显。此外,在验证密码后,最好覆盖数组中的任何值。
如果您从ide运行它,它将失败,请参阅下面的解释以获得完整的答案:explained

643ylb08

643ylb084#

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

uidvcgyl5#

如果我们从控制台运行,给定的代码将非常好地工作。类中没有包名称
你必须确定你的“.class”文件在哪里。因为,如果为类指定了包名,则必须确保将“.class”文件保存在指定的文件夹中。例如,我的包名是“src.main.code”,我必须创建一个代码文件夹,在主文件夹中,在src文件夹中,并将test.class放在代码文件夹中。然后它就会完美地工作。

相关问题