java 在控制檯中以不可見方式接收密碼輸入
阿新 • • 發佈:2021-10-23
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