我试图用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%正确掩蔽的方法?
答案 0 :(得分:10)
答案 1 :(得分: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: ");
答案 2 :(得分:1)
使用某些系统调用(在Windows和unix上)可以禁用对控制台的字符回显。这就是System.console()所做的事情,但它也适用于Java。
我正在使用JNA在jline的私有分支中映射unix和windows的某些系统调用:
如果您需要代码示例,请发表评论。
答案 3 :(得分:0)
使用JDK 6.0,您可以获得类的java源代码,包括Console:我刚刚验证过,这个类只有Java 5.0依赖项。
因此,在您的项目中,您可以创建此Console类的副本,然后使用readPassword方法。我没有尝试,但它应该工作。