Masquage du mot de passe depuis la console: Java

comment masquer un mot de passe depuis l'entrée de la console? J'utilise la version 6 de Java.

j'ai essayé d'utiliser console.readPassword(), mais ça ne marcherait pas. Un exemple complet pourrait m'aider en fait.

Voici mon code:

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");
    }
}

je reçois une NullPointerException...

32
demandé sur ROMANIA_engineer 2011-11-15 19:04:54

4 réponses

Un exemple complet ?. Exécutez ce code: (NB: cet exemple est mieux exécuté dans la console et non à partir d'un IDE, puisque le système.la méthode console () pourrait retourner null dans ce cas.)

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();
    }
}
48
répondu bilash.saha 2017-01-12 04:04:48

vous utiliseriez le Console classe

char[] password = console.readPassword("Enter password");  
Arrays.fill(password, ' ');

en exécutant readPassword l'écho est désactivé. Après le mot de passe est validé, il est préférable de remplacer toutes les valeurs dans le tableau.

Si vous l'exécuter à partir d'un ide il échoue, reportez-vous à cette explication pour une bonne réponse: Expliqué

7
répondu Woot4Moo 2015-04-20 14:12:39
Console console = System.console();
String username = console.readLine("Username: ");
char[] password = console.readPassword("Password: ");
2
répondu user1525941 2012-11-21 16:22:34

si vous avez affaire à un tableau de caractères Java (tels que des caractères de mot de passe que vous avez lus depuis la console), vous pouvez le convertir en chaîne JRuby avec le code Ruby suivant:

# GIST: "pw_from_console.rb" under "https://gist.github.com/drhuffman12"

jconsole = Java::java.lang.System.console()
password = jconsole.readPassword()
ruby_string = ''
password.to_a.each {|c| ruby_string << c.chr}

# .. do something with 'password' variable ..    
puts "password_chars: #{password_chars.inspect}"
puts "password_string: #{password_string}"

Voir aussi "https://stackoverflow.com/a/27628738/4390019" et "https://stackoverflow.com/a/27628756/4390019"

0
répondu Daniel Huffman 2017-05-23 10:31:30