Enmascaramiento de entrada de contraseña desde la consola: Java

¿Cómo enmascarar una contraseña desde la entrada de la consola? Estoy usando Java 6.

Intenté usar console.readPassword() , pero no funcionaría. Un ejemplo completo podría ayudarme en realidad.

Aquí está mi código:

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

Obtengo una NullPointerException …

Un ejemplo completo? Ejecute este código: (NB: este ejemplo se ejecuta mejor en la consola y no desde un IDE, ya que el método System.console () puede devolver nulo en ese caso).

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

Utilizarías la clase de consola

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

Al ejecutar el eco de ReadingPassword está deshabilitado. También después de validar la contraseña, es mejor sobrescribir cualquier valor en la matriz.

Si ejecuta esto desde un ide, fallará, consulte esta explicación para obtener una respuesta completa: Explicación

 Console console = System.console(); String username = console.readLine("Username: "); char[] password = console.readPassword("Password: "); 

Si está tratando con una matriz de caracteres Java (como los caracteres de contraseña que lee desde la consola), puede convertirla en una cadena JRuby con el siguiente código Ruby:

 # 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}" 

Ver también " https://stackoverflow.com/a/27628738/4390019 " y " https://stackoverflow.com/a/27628756/4390019 "