質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2194閲覧

Javaでのキーボード入力の打点間隔を記録するアプリケーションの作成

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/07/26 05:36

こんにちは。
現在、キーボードの一文字一文字の打点間隔で個人特定をするキーストローク認証に関する研究を考えています。
流れとしては一定数のユーザーにある程度の1000文字程度の文章を入力してもらい、キーボードの1キーごとの打点間隔を記録→指定の文(10~20文字程度の文章)を入力してもらい記録した打点間隔と照合といった感じです。
どういったプログラムを書けば良いか教えていただければ幸いです。
またJava以外の言語を利用した方が良い等のアドバイスがあればお伺いしたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/27 08:38

プログラミング以前に、どういうアルゴリズムで計算するのか、ですね。 アルゴリズムが決まっていれば、今度はGUIアプリケーションの作り方をプログラミングするという感じですかね。 まずは、アルゴリズムがないと、誰も答えてくれないと思います。でも、アルゴリズム自体が複雑であれば、回答難しいかもね。
guest

回答1

0

ベストアンサー

java

1import java.awt.Frame; 2import java.awt.Label; 3import java.awt.event.KeyAdapter; 4import java.awt.event.KeyEvent; 5import java.awt.event.WindowAdapter; 6import java.awt.event.WindowEvent; 7 8public class KeyIntervalWatcher extends Frame { 9 private long oldTime; // 前回キー入力時刻 10 public KeyIntervalWatcher() { 11 super("KeyIntervalWatcher"); 12 setSize(400, 200); 13 add(new Label("press any key")); 14 15 oldTime = System.currentTimeMillis(); //現在時刻(ミリ秒)取得 16 17 // キー入力イベントを受け取る 18 addKeyListener(new KeyAdapter() { 19 public void keyPressed(KeyEvent e) { 20 System.out.printf("%c ... %d\n", 21 e.getKeyChar(), //キー文字 22 e.getWhen()-oldTime); //イベント発生時刻から間隔を算出 23 oldTime = e.getWhen(); 24 } 25 }); 26 27 // ウィンドウを閉じると終了 28 addWindowListener(new WindowAdapter() { 29 public void windowClosing(WindowEvent e) { 30 System.exit(0); 31 } 32 }); 33 } 34 public static void main(String[] args) { 35 new KeyIntervalWatcher().setVisible(true); 36 } 37}

アルゴリズムはさておき、キーの入力間隔をミリ秒単位でコンソールに出力する
プログラムです。考え方はこんな感じになるのではないでしょうか。
(AWT!?というつっこみは無しで・・・)

しかしひとつ懸念があります。Javaの標準APIだけでこれらをやろうとした場合、
1文字ごとにキーイベントを受け取るには javax.swing か java.awt といった
GUIライブラリを使う必要があります。(コンソールは行単位なので)
このライブラリは画面の描画やイベントの伝搬なども担うため、キー入力以外
にもいろいろ処理することがあって忙しく、キーを押した時刻は取得できても
それが認証に耐えうるようなレベルで正確なのかは分かりません。

Javaはやめて、もっと低レベルなAPI(OS寄りの)で考えたほうが良いのでは
ないでしょうか。
なるべくダイレクトにキー入力を取得するという意味では、SDLやDirectX
といったゲーム用ライブラリが意外に使えるかもしれません。

投稿2016/08/13 15:20

kozzy

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問