簡體   English   中英

如何使用星號等在命令行Java程序中屏蔽密碼?

[英]How do I mask passwords in a command-line Java program with asterisks or the like?

用於從命令行讀取密碼而不顯示密碼的標准JVM方法是java.io.Console.readPassword() 但是,這在用戶輸入時沒有顯示任何內容; 習慣於圖形程序的用戶會希望出現“•”或“*”等符號來代替他們輸入的字符。 當然,他們也希望退格,插入等正常工作,只需將所有操作的角色替換為相同的符號即可。

在2019年,當用戶在控制台應用程序中鍵入“hunter2”時,是否有一個普遍接受的JVM程序用於顯示“*******”? 沒有GUI,這甚至可以正常完成嗎? 關於該主題的2011年SO問題得到了一個答案,鏈接到關於該主題的這篇文章 ; 我們現在可以做得比其中所示的相當精細的解決方案更好嗎?

(我碰巧使用Kotlin作為我選擇的語言,因此如果有Kotlin特定的解決方案將會滿足。)

獵頭? 哇。 參考承認。

沒有簡單的方法。 主要問題是標准的System.in在用戶按下回車之前根本沒有給你任何字符,因此無法模擬它(如果你試圖從System.in讀取char-for-char並發出a *每次按下一個鍵,都不起作用)。

但是, https ://github.com/mabe02/lanterna上的lanterna圖書館可以做到這一點。 如果你想模仿它,那就太復雜了。 它具有unix和windows的分支代碼路徑。 例如,在unix上,它使用一些hackery來確定你所使用的是什么,然后打開正確的/ dev / tty設備。 有了lanterna,自己寫這個將是微不足道的。

就是那個或接受Console.readPassword()的空白虛無,真的。 或者,編寫Web界面或swing / awt / javafx GUI。

我認為你的問題的答案可以在stackoverflow本身找到。 請看這個:

掩蔽密碼輸入來自該控制台的java

來自那里的示例代碼:

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

希望這是有幫助的。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM