【问题标题】:How to mask a password in command line如何在命令行中屏蔽密码
【发布时间】:2011-10-31 06:05:37
【问题描述】:

我想屏蔽密码。我使用了 System.console() 但它并不好,有时它返回 null。有没有其他方法可以停止回声并屏蔽密码?我是java新手。所以请谁能解释一下如何做到这一点。

【问题讨论】:

  • 我说的是不使用 System.console().readPassword()
  • 除非您使用本机代码,否则除了使用 System.console().readPassword() 之外别无他法。
  • 我认为您必须先找出 System.console().readPassword() 有时返回 null 的原因,然后再询问它的替代方案。

标签: java


【解决方案1】:

最好的方法是使用 Java 6 的 Console readPassword() 方法。

这个站点有一篇关于如何使用 Java 5 的好文章。http://www.devdaily.com/java/edu/pj/pj010005/。基本上他们用 InputStreamReader 包装 System.in 并读取一行。

如果您在 Unix 系统上,您可以尝试在读取程序之前运行带有参数 -echo 的系统程序 stty,然后再运行程序 stty echo

ProcessBuilder pb = new ProcessBuilder("stty", "-echo");
pb.start().waitFor();
// Read the password here
pb = new ProcessBuilder("stty", "echo");
pb.start().waitFor();

请注意,我没有尝试过这个!一些stty 程序对此感到满意,而另一些则不满意(那些不需要他们的stdin 来自/dev/tty 才能正常工作...)

【讨论】:

  • @JKAUSHALYA,你所说的有时它不起作用的意思。什么不是?首先你有什么期望?
  • @vineet 我不知道为什么,但有时它返回 null。我想在 Windows 命令行中屏蔽密码。
  • @JKAUSHALYA 好吧,你可能想发布代码。 Console.readPassword 应该可以工作,除非你使用不正确。
  • @JKAUSHALYA:那是因为没有可连接的控制台,因此会出现 NullPointerException。这不是 Eclipse 中的错误,因为程序是在 Shell 中执行的。在此处查看此提交的错误:bugs.eclipse.org/bugs/show_bug.cgi?id=122429
猜你喜欢
  • 1970-01-01
  • 2010-12-17
  • 2016-01-21
  • 2017-10-02
  • 2019-04-30
  • 2017-09-08
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
相关资源
最近更新 更多