如何在Java5中屏蔽密码?

如何在Java5中屏蔽密码?,java,passwords,masking,Java,Passwords,Masking,我试图用Java屏蔽密码。Sun java提出了一种屏蔽密码的方法,如下所示 它使用一种简单的方法来实现这一点 public void run () { stop = true; while (stop) { System.out.print("\010*"); try { Thread.currentThread().sleep(1); } catch(InterruptedException ie) { ie.printStackTra

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

它使用一种简单的方法来实现这一点

public void run () {
  stop = true;
  while (stop) {
     System.out.print("\010*");
 try {
    Thread.currentThread().sleep(1);
     } catch(InterruptedException ie) {
        ie.printStackTrace();
     }
  }
}
但这种方法有几个缺点

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

  • 如果用户不小心同时按了两个键(打字速度极高),某些字符不会被屏蔽

  • 你们有没有想过什么方法可以得到100%正确的掩蔽效果

    使用。

    您现在可以使用()

    使用某些系统调用(在windows和unix上),可以禁用向控制台回显字符。这就是System.console()所做的,但它在Java中也可以工作

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

    • 在unix上,我使用的是termios结构和tcgetattr/tcsetattr
    • 在windows上,我正在使用和

    如果您需要代码示例,请留下注释。

    对于JDK 6.0,您有类的java源代码,包括Console:I刚刚验证过,这个类只有java 5.0依赖项


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

    控制台可从Java 6获得。我们的1.5版:(它根本不支持掩蔽。不完全正确。echo()方法是本机方法。java.io.Console仅在java 6中可用。他的问题表明他正在使用java 5。
    Console c = System.console();
    if (c == null) {
        System.err.println("No console.");
        System.exit(1);
    }
    
    
    char [] password = c.readPassword("Enter your password: ");