如何屏蔽在Java 5的密码吗?(How to mask a password in Java 5?

2019-06-25 14:13发布

我试图掩盖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%的正确屏蔽?

Answer 1:

使用Console.readPassword() 。



Answer 2:

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

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


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


Answer 3:

使用某些系统调用(在Windows和UNIX)您可以禁用字符安慰的呼应。 这是System.console()的做法,但它的工作原理也是在Java中。

我使用JNA到UNIX和Windows的某些系统调用映射的JLine的私有分支:

  • 在UNIX上我使用的termios结构和tcgetattr / tcsetattr
  • 在Windows上我使用GetConsoleMode和SetConsoleMode 。

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



Answer 4:

随着JDK 6.0中,你有类,包括控制台的Java源代码:我只是验证,这个类只有Java 5.0中的依赖关系。

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



文章来源: How to mask a password in Java 5?