【问题标题】:String to asterisk, masking password字符串到星号,屏蔽密码
【发布时间】:2011-12-03 00:12:48
【问题描述】:

我正在为 ATM 机创建这个简单的登录代码。 您输入用户名和密码并登录,效果很好。由于我没有连接到数据库或外部文本文件,而且我只有 1 个用户,所以它只是用 Java 代码简单地编写的。但是当您输入密码“p4ss”时,我希望它被屏蔽,因此在键入时您应该看到“* * * *”或“”只是空白(就像在 Linux 上输入 pass 时一样),而不是在屏幕上看到它。

目前我的代码如下所示:

    String user;
    String pass;            
    System.out.print("User: ");
    user = Keyboard.readString();
    System.out.print("Pass: ");
    pass = Keyboard.readString();

    if ((user.equals("Admin")) && (pass.equals("p4ss")))            
    {       
        menu();      
    }    
    else
    {       
        out.println("Wrong username or password.");
    }

如果我能得到任何帮助,我将不胜感激。

【问题讨论】:

  • 这里的键盘类是什么?如果您正在为 ATM 编写代码,您到底为什么要使用 System.out?
  • Stackoverflow 具有内置安全性,当您键入 p4ss 时,我看到的只是 ****
  • 嗯,它只是一个登录页面,键盘类是这样我可以输入文本的。系统输出是这样我可以在屏幕上看到输出。

标签: java string password-protection masking


【解决方案1】:

Michael,看看 Sun 网站上的描述: https://web.archive.org/web/20120214061606/http://java.sun.com/developer/technicalArticles/Security/pwordmask

或者,如果您使用的是 Java 5 或更新版本,您可以使用以下代码: How to mask a password in Java 5?

【讨论】:

    【解决方案2】:

    我假设这是一个模拟的 ATM...

    开发人员指出,控制台上的密码屏蔽是开箱即用的,因此您可以使用它。但是,除了最琐碎的 IO 之外,您最好使用 Swing 或“类似诅咒”的库:

    【讨论】:

    • JavaSE 6 或更高版本中开箱即用地支持密码屏蔽,如我的回答所示。
    【解决方案3】:

    有一个特殊的方法Console.readPassword() 可以做到这一点,在Java 6 中引入。但是你显然不能在真正的ATM 上运行这样的代码! Swing 有JPasswordField,它可以让您在 GUI 中进行这种屏蔽,并且可以想象一个基于 Swing 的 ATM 窗口。

    【讨论】:

    • 第一部分不正确,可以在Java6或更高版本的控制台上屏蔽密码。
    【解决方案4】:

    如果您有 JavaSE 6 或更高版本,则可以使用 Console.readPassword()

    【讨论】:

      猜你喜欢
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2013-07-13
      • 2021-06-26
      • 2017-12-15
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多