如何在Java 5中掩盖密码?

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个回答

10

1
控制台在Java 6中可用。我们的版本是1.5 :( - Chathuranga Chandrasekara
它根本不支持掩码。 - Avin Shum

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: ");

1
java.io.Console 只在 Java 6 中可用。他的问题表明他正在使用 Java 5。 - piepera

1

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

我正在使用JNA将Unix和Windows的某些系统调用映射到jline的私有分支中:

如果您需要代码示例,请留下评论。


0

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

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


不完全正确。echo() 方法是一种本地方法。 - notnoop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接