【问题标题】:How to block command prompt from showing my password while I'm inputting it to my java program [duplicate]当我将密码输入到我的java程序时,如何阻止命令提示符显示我的密码[重复]
【发布时间】:2013-12-11 06:34:25
【问题描述】:

所以我有这个应用程序,我从命令提示符读取用户输入,当用户输入他/她的密码时,我想隐藏它,这样其他人都看不到它:

Please enter your password below
this is password

我想这样展示它:

Please enter your password below
****************

那么在 java 控制台应用程序中有什么方法可以做到这一点吗?

【问题讨论】:

  • @Dlotan 重复!为什么?这里有很多问题,可能这个人无法在 SO 上找到相关问题……你是警察吗?

标签: java console password-protection


【解决方案1】:

看看Console类,它有readPassword()

语法:

public char[] readPassword(String fmt,Object... args)

提供格式化提示,然后从禁用回显的控制台读取密码或密码。

参数:

fmt - 格式字符串,如提示文本的格式字符串语法中所述。

args - 由格式字符串中的格式说明符引用的参数。如果参数多于格式说明符, 额外的参数被忽略。参数的最大数量是 受 Java 数组的最大维度限制,由 Java 虚拟机规范。

返回 - 包含从控制台读取的密码或密码短语的字符数组,不包括任何行终止符 字符,如果已到达流的末尾,则返回 null。

【讨论】:

  • 刚刚格式化您的答案以提高可读性。
  • @LittleChild 没问题干杯
【解决方案2】:

取自评论中指出的答案:

import java.io.Console;
public class Main {

public void passwordExample() {        
    Console console = System.console();
    if (console == null) {
        System.out.println("Couldn't get Console instance");
        System.exit(0);
    }

    console.printf("Testing password%n");
    char passwordArray[] = console.readPassword("Enter your secret password: ");
    console.printf("Password entered was: %s%n", new String(passwordArray));

}

public static void main(String[] args) {
    new Main().passwordExample();
}
}  

需要注意的是,您返回的是 char[] 而不是 String。这是出于安全原因,关于 SO 的同一主题还有另一个很好的答案。你应该在你的工作完成后通过覆盖它来销毁这个char[]Strings 可以在内存中停留更长时间,直到 GC 收集它们,这可能是一个安全风险。

从命令行而不是从 IDE 运行示例。它可能不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2011-12-08
    相关资源
    最近更新 更多