屏蔽从控制台输入的密码:Java

New*_*art 40 java passwords console console-application masking

如何从控制台输入掩码密码?我正在使用Java 6.

我尝试过使用console.readPassword(),但它不起作用.一个完整的例子可能对我有帮助.

这是我的代码:

import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test 
{   
    public static void main(String[] args) 
    {   
        Console console = System.console();

        console.printf("Please enter your username: ");
        String username = console.readLine();
        console.printf(username + "\n");

        console.printf("Please enter your password: ");
        char[] passwordChars = console.readPassword();
        String passwordString = new String(passwordChars);

        console.printf(passwordString + "\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到一个NullPointerException ...

bil*_*aha 60

一个完整的例子?运行此代码:(注意:此示例最好在控制台中运行,而不是在IDE中运行,因为在这种情况下System.console()方法可能会返回null.)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于获得空指针的人,从控制台运行它,从eclipse这将无法正常工作 (10认同)
  • @ Woot4Moo你能澄清为什么这是"高度不安全"吗?如果没有任何关于原因的背景,那么单独的陈述对于促进理解并不是非常有用(也不容易验证或反驳). (3认同)
  • 在对线路的内部存储器安全风险进行微调时没有多大意义,该线路实际上是将密码打印到控制台. (3认同)
  • 我得到一个空指针......这似乎不起作用 (2认同)
  • 你是在IDE中运行它吗?代码不是在运行吗?为什么要downvote? (2认同)

Woo*_*Moo 8

您将使用Console

char[] password = console.readPassword("Enter password");  
Arrays.fill(password, ' ');
Run Code Online (Sandbox Code Playgroud)

通过执行readPassword,可以禁用回显.验证密码后,最好覆盖数组中的任何值.

如果你从一个ide运行它会失败,请看这个解释得到一个彻底的答案:解释

  • @ Woot4Moo:请你详细说明"接受的答案是不安全的!".我看到你在阅读密码后正在写密码,但这看起来很愚蠢.无论你做什么,密码都将在内存中存在一段时间.即使您没有手动写入持有密码的内存,也会收集垃圾,内存将被其他内容重新填充.老实说,如果某人有能力在内存中读取任意地址,我认为你应该有更大的担忧. (2认同)