屏蔽java中的密码字段

时间:2010-09-22 07:13:13

标签: java command-line passwords masking

我正在开发一个Java命令行应用程序,当用户输入密码时,我需要显示一个星号(*)或任何类似的符号。我尝试使用replace()方法,但它只接受一个字符。有没有办法将所有字母和数字作为此替换方法的参数传递。或者屏蔽suer输入的方法是什么。

我不能在这里使用console.readPassword技术,因为我需要String数据类型中的密码(用户tpyed)。

5 个答案:

答案 0 :(得分:4)

实际上,您无法使用替换方法。通过使用它,用户输入仍然可见,并且您只是更改存储在内存中的值。

如果您需要密码作为字符串(出于安全原因不建议使用,但无论如何......):

char[] pwd = console.readPassword();
String str = new String(pwd);

答案 1 :(得分:2)

只需将char数组转换为字符串即可。 Console.readPassword完全针对您的用例(读取pwd:D)。

最初,它是char []而不是String,因为你可以使数组的内容为空,并且你的密码消失了,而String可能会被合并并留在你的记忆中。

答案 2 :(得分:1)

这里有一个例子: Password Masking in the Java Programming Language [java.sun.com]

答案 3 :(得分:0)

只需使用console.readPassword(),然后从String创建char[]

String passWord = new String(chars);

答案 4 :(得分:0)

由于您要输出星号,因此无法使用console.readPassword。相反,您必须自己完成:禁用回显,将输入切换为无缓冲(char-wise而不是line-wise)模式,通过char读取密码char,为您读取的每个char打印星号。我建议你为这个任务找一个类似curses的java库(有几个,见What's a good Java, curses-like, library for terminal applications?)。