1. 程式人生 > 其它 >java 在控制檯中以不可見方式接收密碼輸入

java 在控制檯中以不可見方式接收密碼輸入

java 在控制檯中以不可見方式接收密碼輸入

java中可以使用java.util.Scanner類從鍵盤讀取輸入,但是由於輸入內容是可見的,所以java.util.Scanner不適合接收密碼輸入。

想要使密碼輸入不可見,可以使用Java6特別引入的java.io.Console類

使用舉例:

public static void main(String[] args) {
    Console cons = System.console();
    String username = cons.readLine("請輸入使用者名稱:");
    char[] pwd = cons.readPassword("請輸入密碼:");
    String passwd = new String(pwd);
    System.out.println(username + " " + passwd);
}

使用這種方式接收密碼,輸入的密碼在控制檯中不可見,提高了安全性,但是這種方式的使用具有侷限性,在Java API文件關於java.io.Console的介紹中有這樣一段話:

虛擬機器是否具有控制檯取決於底層平臺以及虛擬機器的呼叫方式。 如果虛擬機器從互動式命令列啟動,而不重定向標準輸入和輸出流,則其控制檯將存在,並且通常將連線到啟動虛擬機器的鍵盤和顯示器。 如果虛擬機器是自動啟動的,例如由後臺作業排程程式啟動,則通常不具有控制檯。

也就是說,java.io.Console只能在標準輸入/輸出流未被重定向的原始控制檯中使用,在eclipse等IDE中System.console()返回的結果是null。

參考資料:

[1] Cay S.Horstmann 著,林琪 蘇鈺涵等譯.Java核心技術 卷1(原書第11版).北京:機械工業出版社,2020:55-56.

[2] Waylon.Java中console類的簡單用法.部落格園,https://www.cnblogs.com/-wanglei/p/10374673.html

[3] matools.Java 8 中文版 - 線上API中文手冊.碼工具,https://www.matools.com/file/manual/jdk_api_1.8_google/java/io/Console.html