如何在Java 5中屏蔽密码?

时间:2009-07-10 11:01:40

标签: java passwords masking

我试图用Java掩盖密码。 Sun java建议了一种屏蔽密码的方法,如下所示。

Masking a password

它使用一种简单的方法来做到这一点。

public void run () {
  stop = true;
  while (stop) {
     System.out.print("\010*");
 try {
    Thread.currentThread().sleep(1);
     } catch(InterruptedException ie) {
        ie.printStackTrace();
     }
  }
}

但这种方法有几个缺点。

  1. 如果用户使用箭头键+删除键,则会显示密码。

  2. 如果用户意外同时按下2个键(打字速度极快)某些字符不会被屏蔽。

  3. 你们有没有想过可以获得100%正确掩蔽的方法?

4 个答案:

答案 0 :(得分:10)

答案 1 :(得分:4)

您现在可以使用System.console();

Console c = System.console();
if (c == null) {
    System.err.println("No console.");
    System.exit(1);
}


char [] password = c.readPassword("Enter your password: ");

答案 2 :(得分:1)

使用某些系统调用(在Windows和unix上)可以禁用对控制台的字符回显。这就是System.console()所做的事情,但它也适用于Java。

我正在使用JNA在jline的私有分支中映射unix和windows的某些系统调用:

如果您需要代码示例,请发表评论。

答案 3 :(得分:0)

使用JDK 6.0,您可以获得类的java源代码,包括Console:我刚刚验证过,这个类只有Java 5.0依赖项。

因此,在您的项目中,您可以创建此Console类的副本,然后使用readPassword方法。我没有尝试,但它应该工作。