Java 如何隐藏扫描仪输入的文本?

Java 如何隐藏扫描仪输入的文本?,java,passwords,Java,Passwords,可能重复: 我正在做一个密码安全检查程序,我的问题很奇怪,因为我的程序运行得很好。我想知道的是,是否有任何方法可以使输入控制台的文本显示为密码字段中的文本。i、 e在用户按下返回键之前,输入的单词将显示为“**” 我知道JFrame有一个JPasswordField方法,但我认为这对我仅仅使用Scanner没有帮助 这是我的密码: import java.util.Scanner; public class SecurityCheckerMain { static String e

可能重复:

我正在做一个密码安全检查程序,我的问题很奇怪,因为我的程序运行得很好。我想知道的是,是否有任何方法可以使输入控制台的文本显示为密码字段中的文本。i、 e在用户按下返回键之前,输入的单词将显示为“**”

我知道
JFrame
有一个
JPasswordField
方法,但我认为这对我仅仅使用
Scanner
没有帮助

这是我的密码:

import java.util.Scanner;

public class SecurityCheckerMain {

    static String enteredPassword;

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("Please enter your password: ");
        enteredPassword = input.nextLine();
        Checker tc = new Checker(enteredPassword);
        tc.checkSecurity();

    }

}

公共类检查器{
//字符数:越高越好(“密码必须大于8个字符”){done}
//大小写组合{done}
//包含数字{done}
//非重复字符(每个字符都是不同的ascii字符){done}
//不是连续密码,即123456789或987654321{done}
//不为空(“[空格]”{done}
内充;
最终int最大强度=10;
int pStrength=0;
串通;
公共检查器(字符串pwd){
通过=pwd;
充压长度=pwd.长度();
}
公共安全(){
if(pass.isEmpty()){
System.out.println(“密码字段为空!密码非常不安全。”);
}
如果(正压>=8){
pStrength++;
如果(正压>=12){
pStrength++;
如果(正压>=16){
pStrength++;
}
}
}
if(大写(pass)和小写(pass)){
p强度+=2;
}
if(包含个数(通过)){
p强度+=2;
}
if(hasnorepeat(pass)){
p强度+=2;
}
如果(!包含连接器(通过)){
pStrength++;
}
System.out.println(“您的密码强度等级为“+pStrength+”/“+MAX_-strength”);
}
//组件方法
公共布尔值大写(字符串str){
对于(int i=0;i您可以使用

提供格式化提示,然后从中读取密码或密码短语 已禁用带有回音的控制台


在Java中,你不能一个字符一个字符地阅读,只能一行一行地阅读。你可以做的是在黑色背景上将文本的颜色更改为黑色。下面是一个例子,请看一看,谢谢你的回复!但是当我尝试用这段代码运行程序时,我在第14行遇到了一个空指针异常…有什么想法吗?更新:显然这是一个已知的错误我正在使用的IDE(Eclipse)中存在错误。我想我只能接受它,或者使用SwingI尝试在windows终端中运行此代码。但是console的值为null!通过命令提示符运行它,它将工作,它对我工作
public class Checker {

    //number of chars : the Higher the Better("password must be greater than 8 chars"){done}
    //combination of uppercase and lowercase{done}
    //contains numbers{done}
    //non repeated characters (every char is different ascii char){done}
    //is not a consecutive password ie 123456789 or 987654321{done}
    //is not blank ("[space]"){done} 


    int pLength;
    final int MAX_STRENGTH = 10;
    int pStrength = 0;
    String pass;

    public Checker(String pwd){
        pass = pwd;
        pLength = pwd.length();

    }

    public void checkSecurity(){
        if(pass.isEmpty()){
            System.out.println("Password Field is Empty! Password is Very Insecure.");
        }
        if(pLength >= 8){
            pStrength++;
            if(pLength >= 12){
                pStrength++;
                if(pLength >= 16){
                    pStrength++;
                }
            }
        }
        if(hasUpperCase(pass) && hasLowerCase(pass)){
            pStrength+=2;
        }
        if(containsNumbers(pass)){
            pStrength+=2;
        }
        if(hasNoRepeats(pass)){
            pStrength+=2;
        }
        if(!containsConsecutiveNums(pass)){
            pStrength++;
        }

        System.out.println("Your password strength is rated at " + pStrength +"/" + MAX_STRENGTH);

    }


    //Component Methods

    public boolean hasUpperCase(String str){
        for(int i = 0; i<pLength; i++){
            if(Character.isUpperCase(str.charAt(i))){
                return true;
            }
        }
        return false;

    }

    public boolean hasLowerCase(String str){
        for(int i  = 0; i<pLength; i++){
            if(Character.isUpperCase(str.charAt(i))){
                return true;
            }
        }
        return false;
    }

    public boolean containsNumbers(String str){
        for(int i = 0; i<pLength; i++){
            if(Character.isDigit(str.charAt(i))){
                return true;
            }
        }
        return false;
    }

    public boolean hasNoRepeats(String str){
        for(int i = 0; i<pLength; i++)
            if(containsChar(str, str.charAt(i))){
                return false;
            }
        return true;
    }


    public boolean containsChar(String s, char search) {
        if (s.length() == 0)
            return false;
        else
            return s.charAt(0) == search || containsChar(s.substring(1), search);
    }

    public boolean containsConsecutiveNums(String str){
        for(int i = 0; i<pLength; i++){
            if(Character.isDigit(str.charAt(i))){
                if(str.charAt(i)-1 == str.charAt(i-1) || str.charAt(i)+1 == str.charAt(i+1)){
                    return true;
                }
            }
        }
        return false;
    }
}
readPassword(String fmt, Object... args) 
public class SecurityCheckerMain {

    static String enteredPassword;

    public static void main(String[] args) {

        Console console = System.console();

        enteredPassword =
            new String(console.readPassword("Please enter your password: "));
        Checker tc = new Checker(enteredPassword);
        tc.checkSecurity();

    }