9

Javaでパスワードをマスクしようとしています。Sun java は、次のようにパスワードをマスクする方法を提案しています。

パスワードのマスキング

それを行うには、簡単な方法を使用します。

public void run () {
  stop = true;
  while (stop) {
     System.out.print("\010*");
 try {
    Thread.currentThread().sleep(1);
     } catch(InterruptedException ie) {
        ie.printStackTrace();
     }
  }
}

しかし、このアプローチにはいくつかの欠点があります。

  1. ユーザーが矢印キーと削除キーを使用すると、パスワードが明らかになります。

  2. ユーザーが誤って 2 つのキーを同時に押した場合 (非常に高速なタイピング速度)、一部の文字がマスクされません。

100% 正しいマスキングを取得できる方法を考えていますか?

4

4 に答える 4

10

Console.readPassword()を使用します。

于 2009-07-10T11:04:19.833 に答える
4

System.console ();を使用できるようになりました。

Console c = System.console();
if (c == null) {
    System.err.println("No console.");
    System.exit(1);
}


char [] password = c.readPassword("Enter your password: ");
于 2009-07-10T11:06:08.130 に答える
1

特定のシステムコール (Windows および UNIX) を使用すると、コンソールへの文字のエコーを無効にすることができます。これは System.console() が行うことですが、Java でも機能します。

私はJNAを使用して、jlineのプライベートブランチでunixとwindowsの特定のsyscallをマップしています:

  • UNIX では、termios構造とtcgetattr/tcsetattrを使用しています。
  • Windows では、GetConsoleModeSetConsoleModeを使用しています。

コード例が必要な場合は、コメントを残してください。

于 2009-07-10T12:08:08.083 に答える
0

JDK 6.0 では、 Console を含むクラスの Java ソースがあります。確認したところ、このクラスには Java 5.0 の依存関係しかありません。

そのため、プロジェクトでこの Console クラスのコピーを作成し、readPassword メソッドを使用できます。私は試していませんが、うまくいくはずです。

于 2009-07-10T13:12:19.917 に答える