9

我正在尝试用 Java 屏蔽密码。Sun java 提出了一种屏蔽密码的方法,如下所示。

屏蔽密码

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

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

但是这种方法有几个缺点。

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

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

你们有什么方法可以得到 100% 正确的遮罩吗?

4

4 回答 4

10

使用Console.readPassword()

于 2009-07-10T11:04:19.833 回答
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: ");
于 2009-07-10T11:06:08.130 回答
1

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

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

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

于 2009-07-10T12:08:08.083 回答
0

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

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

于 2009-07-10T13:12:19.917 回答