gpt4 book ai didi

java - 如何在重定向 stdout 时安全地从 Java 控制台读取密码?

转载 作者:行者123 更新时间:2023-12-02 06:08:59 24 4
gpt4 key购买 nike

我使用这个相当简单的代码从控制台读取密码:

String s = new String(System.console().readPassword("Enter password:"));

当我从这样的命令运行它时:

$ java Foo
Enter password:

一切都很好。但是如果我重定向标准输出,我会得到:

$ java Foo > /dev/null
Exception in thread "main" java.lang.NullPointerException
at Foo.main(Foo.java:122)

(第 122 行是上面所示的行)

重定向 stdout 会杀死控制台,这很奇怪,但我可以理解为什么会发生这种情况。

我不想得到一个 NPE,而是想以某种方式解决这个问题,但我不确定 Java 中是否有其他工具允许从键盘读取敏感值而不回显字符。

还有其他可靠的策略吗?我怀疑我也许能够使用 ANSI 转义将终端置于特定模式,但我不知道 Java 中的这些转义有多可靠。

最佳答案

我不知道这是否是您所需要的,但如果可能的话,您可以像在应用程序开始时那样从控制台加载密码,然后以编程方式将系统输出重定向到其余的地方执行

System.setOut(new PrintStream(new OutputStream() {
// don't write to nowhere
public void write(int b) { }
}));

在 JDK11 中你可以这样做

System.setOut(new PrintStream(OutputStream.nullOutputStream()));

关于java - 如何在重定向 stdout 时安全地从 Java 控制台读取密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55924226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com