如何从控制台输入屏蔽密码?我正在使用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 ...
答案 0 :(得分:55)
一个完整的例子?运行此代码:(注意:此示例最好在控制台中运行,而不是在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();
}
}
答案 1 :(得分:8)
您可以使用Console类
char[] password = console.readPassword("Enter password");
Arrays.fill(password, ' ');
通过执行readPassword,禁用回显。验证密码后,最好覆盖数组中的任何值。
如果你从一个ide运行它会失败,请看这个解释得到一个彻底的答案:Explained
答案 2 :(得分:2)
Console console = System.console();
String username = console.readLine("Username: ");
char[] password = console.readPassword("Password: ");
答案 3 :(得分:0)
如果您正在处理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}"
另见&#34; https://stackoverflow.com/a/27628738/4390019&#34;和&#34; https://stackoverflow.com/a/27628756/4390019&#34;
答案 4 :(得分:0)
如果从控制台运行,则给定的给定代码绝对可以正常工作。而且该课程中没有软件包名称
您必须确保您的“ .class”文件在哪里。因为,如果为该类指定了软件包名称,则必须确保将“ .class”文件保留在指定的文件夹中。例如,我的包名称是“ src.main.code”,我必须在主文件夹内,src文件夹内创建一个代码文件夹,并将Test.class放在代码文件夹中。那么它将完美运行。