【问题标题】:Masking password in Java CLI applicationJava CLI 应用程序中的屏蔽密码
【发布时间】:2011-11-17 06:19:59
【问题描述】:

我已经用 Java (CLI) 制作了这个小 ATM 应用程序,一开始我想要“代码:”,然后用户应该输入它,在我的 Java 应用程序中它应该说类似 String(或 int ?) 代码 = 1234;如果成功则继续,如果没有错,请重试,如果失败 3 次,则停止应用。

这样的东西看起来怎么样?在屏蔽密码并尝试不同类型的代码后,我已经搜索了几个小时,但没有任何运气。我只想要一些简单的东西,将字符串转换为星号。

目前我的密码屏蔽如下所示:

java.io.Console cons;
char[] passwd;

if ((cons = System.console()) != null && (passwd = cons.readPassword("[%s]", "Code:")) != null)

但是我不能(不知道)如何在代码中设置密码。

【问题讨论】:

  • 你目前有什么不工作的?
  • 我用我当前使用的代码编辑了我的第一篇文章。
  • 关于“我已经用谷歌搜索了好几个小时”......那你可能不知道如何使用谷歌。 “java命令行密码屏蔽”的第一个搜索结果正是你所需要的。
  • 我一直在寻找第一个出现的问题,但它们没有帮助我,因为我显然没有正确理解它们。
  • here 是您问题的答案。

标签: java command-line passwords mask


【解决方案1】:

使用java.io.Console类的readPassword方法。

Console 类的 API documentation 有一个示例,说明如何从控制台窗口读取密码而不以明文形式回显。

编辑

Michael,这段代码是让用户在控制台窗口中输入关键字而不显示它。用户完成此操作后,密码将存储在变量passwd 中。看来您真正想要的是完全不同的东西:您有一些其他程序要求输入密码,并且您希望您的程序自动输入该密码。

如果这确实是您想要做的,那么您不需要使用Console 类。您可以尝试使用 java.awt.Robot 类在另一个应用程序中输入击键(但我不确定它是否适用于控制台窗口 - 试试看)。

【讨论】:

  • 这是我目前正在使用的,但我如何设置密码?
  • @Michael:描述一下“用它设置密码”是什么意思。在您的示例中,您有 char[] passwd 变量,该变量将填充密码文本。你还想要什么? 您想在哪里“设置”密码?
  • 好吧,如果我把 char[somepassword] passwd;它只是不会运行,“somepassword”行变成红色下划线。我试过 char[] passwd = somepassword;和 char['p'] 密码;但没有一个有效。
  • char[somepassword] passwd;char['p'] passwd; 之类的东西不是有效的 Java 代码。你想用它来完成什么?
  • 我想在我的代码中设置一个密码,稍后我可以在控制台中输入该密码以使用该应用程序。
【解决方案2】:

看看这个 sun Java article... 它强调了许多不同的方法。

它特别展示了如何使用 AWT 的 TextField 类和 setEchoChar() 方法,以及一个运行单独线程来删除和替换控制台应用程序中键入的字符的方法。

【讨论】:

  • 我想到的第一件事,但你更快 :) 是的,这就是 Java 6 之前的方式。
  • @Michael,仔细阅读,有一节“命令行输入屏蔽”
  • 刚刚阅读了一些关于命令行的内容……但这篇文章仍然有效……它强调了一些有趣的方法
  • 不仅这个答案本身没有抓住问题的重点,而且“强调了许多不同的方法”的文章链接已经死了。始终提取与答案相关的信息,而不仅仅是链接到文章。
【解决方案3】:

这个网站有一个你正在尝试做的事情的例子:http://download.oracle.com/javase/tutorial/essential/io/cl.html

为了彻底,heretwo 更多类似教程的链接。


他们会回答你的问题吗?


根据您的 cmets,您可能并不完全了解 Java 语法。

你不能写:

char["mypassword"] passwd;

我想你的意思是:

String str = "mypassword";
char[] passwd = str.toCharArray();

更新

试试这个代码:

Console c = System.console();
if (c == null) {
    System.err.println("No console.");
    System.exit(1);
}

char [] passwd = c.readPassword("Enter your password: ");

c.println("Password is:");
c.println(new String(passwd));

【讨论】:

  • 好吧,如果我尝试类似:String str = "mypassword"; char[] passwd = str.toCharArray(); if ((cons = System.console()) != null && (passwd = cons.readPassword("[%s]", "Code: ")) != null) { ......mycode } 应用程序有效,但密码无效。我仍然可以使用空白密码登录应用程序。
  • @Michael:看看我的更新——这行得通吗?它是否正确打印出密码?
  • @Michael:现在来吧,当然你需要合适的import java.io.Console; 行。还有一些带有public static void main(...)等的类(:
  • @Michael: 或者只是将Console 替换为java.io.Console,如原始问题中的示例代码所示。
猜你喜欢
  • 2011-03-25
  • 2016-10-12
  • 2011-04-09
  • 2013-12-18
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多