我试图掩盖Java中的密码。 SUN JAVA已经提出了一种方法来掩盖密码如下。
屏蔽密码
它使用一个简单的方法来做到这一点。
public void run () {
stop = true;
while (stop) {
System.out.print("\010*");
try {
Thread.currentThread().sleep(1);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
}
}
但是,这种方法有几个缺点。
如果用户使用箭头键+删除键的密码被透露。
如果用户不小心按2个键在同一时间(极高的打字速度)的某些字符不会被掩盖。
你们认为什么办法,可以得到100%的正确屏蔽?
使用Console.readPassword() 。
您现在可以使用System.console ();
Console c = System.console();
if (c == null) {
System.err.println("No console.");
System.exit(1);
}
char [] password = c.readPassword("Enter your password: ");
使用某些系统调用(在Windows和UNIX)您可以禁用字符安慰的呼应。 这是System.console()的做法,但它的工作原理也是在Java中。
我使用JNA到UNIX和Windows的某些系统调用映射的JLine的私有分支:
- 在UNIX上我使用的termios结构和tcgetattr / tcsetattr
- 在Windows上我使用GetConsoleMode和SetConsoleMode 。
如果您需要的代码示例发表评论。
随着JDK 6.0中,你有类,包括控制台的Java源代码:我只是验证,这个类只有Java 5.0中的依赖关系。
所以,在你的项目,你可以创建这个控制台类的副本,然后使用readPassword方法。 我没有尝试,但它应该工作。