Java 5でパスワードをマスクするにはどうすればよいですか?
質問
Javaでパスワードをマスクしようとしています。Sun Java は、次のようにパスワードをマスクする方法を提案しています。
それを行うには簡単な方法を使用します。
public void run () {
stop = true;
while (stop) {
System.out.print("\010*");
try {
Thread.currentThread().sleep(1);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
}
}
しかし、このアプローチにはいくつかの欠点があります。
ユーザーが矢印キーと削除キーを使用すると、パスワードが明らかになります。
ユーザーが誤って 2 つのキーを同時に押した場合 (入力速度が非常に速い場合)、一部の文字はマスクされません。
100%正しいマスキングを実現する方法はありますか?
解決
を使用 Console.readPassword() のます。
他のヒント
これで、 System.console 使用することができますA>();
Console c = System.console();
if (c == null) {
System.err.println("No console.");
System.exit(1);
}
char [] password = c.readPassword("Enter your password: ");
特定のシステムコール (Windows および UNIX 上) を使用すると、コンソールへの文字のエコーを無効にすることができます。これは System.console() が行うことですが、Java でも機能します。
JNAを使用して、UNIXとWindowsの特定のシステムコールをjlineのプライベートブランチにマップしています。
- UNIXでは私はを使用しています テルミオス 構造と tcgetattr/tcsetattr
- 私が使用しているWindowsでは コンソールモードの取得 そして コンソールモードの設定.
コード例が必要な場合は、コメントを残してください。
私はちょうど検証し、このクラスでは唯一のJava 5.0の依存関係を持っている。
は、JDK 6.0を使用すると、コンソールを含む、クラスのJavaソースを持っています。
だから、あなたのプロジェクトでは、あなたがこのコンソールクラスのコピーを作成し、readPasswordメソッドを使用することができます。私は試していないが、それは動作するはずです。
所属していません StackOverflow