2013-11-26 24 views
1

所以我有這個應用程序,我從哪裏讀取用戶輸入命令提示符,當用戶輸入他/她的密碼,我想將其隱藏,使得其他人無法看到這樣的:如何阻止命令提示符顯示我的密碼,而我輸入它到我的java程序

Please enter your password below 
this is password 

我想表明它是這樣的:

Please enter your password below 
**************** 

那麼,有沒有在Java控制檯應用這樣的方法嗎?

+0

@Dlotan重複!爲什麼?這裏有很多問題,可能這個人不能找到關於這個問題的相關問題。你是警察嗎? –

回答

2

看看在Console類,它有readPassword()

語法:

public char[] readPassword(String fmt,Object... args) 

提供一個格式化提示,然後從讀取,禁用回顯的控制檯密碼或口令。

參數:

FMT - 作爲用於提示文本格式字符串語法描述的格式字符串。

參數 - 格式字符串中格式說明符引用的參數。如果有更多的參數比格式說明符, 額外的參數被忽略。參數的最大數量爲 ,受限於Java虛擬機規範 定義的Java數組的最大維數。

返回 - 包含從控制檯,不包括任何行終止 字符讀取的密碼或口令的字符數組,或null如果流的端已經達到。

+0

剛剛格式化您的答案爲可讀性。 –

+1

@LittleChild沒有問題歡呼 –

2

從答案兩者指向註釋:

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

需要注意的事情是,你得到回char[]而不是String。這是出於安全原因,關於SO的這個相同主題還有另一個很好的答案。工作完成後,您應該通過覆蓋它來銷燬此char[]String s可以保留更長的時間直到GC收集它們,這可能是一個安全風險。

從命令行運行該示例,而不是從IDE運行該示例。它可能不起作用。

相關問題