使用 Java 或 Python 捕获行为生物识别工具的按键时间?
Capturing key press times for a behavioral biometrics tool using Java or Python?
我正在尝试创建一个使用键盘使用模式来识别用户的行为生物识别工具。这个想法是捕捉用户如何输入,而不是什么。我考虑过捕获用户按下和释放一个键所花费的时间,以及从一个键按下到另一个键的时间。
我一直在研究 jnativehook but I've only found "keylogger" type of programs and tutorials, same with pynput,我认为不可能使用我描述的方式...
有人可以给我提示或教程来做这样的事情吗?
谢谢。
pynput
可以 运行 一个函数 on press
和另一个 on release
并且两个函数都可以将当前时间保存在两个变量中。如果你在一个函数中减去它们,那么你应该得到按下的时间,如果你在其他函数中减去它们,那么你应该得到释放的时间。
在代码中,我检查了任何键之间的时间,也检查了每个键的时间。
from pynput import keyboard
import datetime
# --- data ---
press_time = None
release_time = None
keys_press_time = {}
keys_release_time = {}
# --- functions ---
def press(key):
global press_time
press_time = datetime.datetime.now()
if release_time:
print('how long was released:', press_time - release_time, 'key: ANY')
# --- individual keys ---
keys_press_time[key] = press_time
if key in keys_release_time:
print('how long was released:', keys_press_time[key] - keys_release_time[key], 'key:', str(key))
def release(key):
global release_time
release_time = datetime.datetime.now()
if press_time:
print('how long was pressed :', release_time - press_time, 'key: ANY')
# --- individual keys ---
keys_release_time[key] = release_time
if key in keys_press_time:
print('how long was pressed :', keys_release_time[key] - keys_press_time[key], 'key:', str(key))
# --- main ---
with keyboard.Listener(on_press=press, on_release=release) as listener:
# ... other code ...
listener.join()
唯一的问题是,当您将某些密钥保留得更长时,系统开始重复密钥(它会生成 release
事件),然后它会提供更短的时间。它需要关闭系统中的“重复”,或者需要更复杂的代码来减少这个问题。
顺便说一句: 我想你可以用非常相似的方式对 jnativehook
做同样的事情。
我正在尝试创建一个使用键盘使用模式来识别用户的行为生物识别工具。这个想法是捕捉用户如何输入,而不是什么。我考虑过捕获用户按下和释放一个键所花费的时间,以及从一个键按下到另一个键的时间。
我一直在研究 jnativehook but I've only found "keylogger" type of programs and tutorials, same with pynput,我认为不可能使用我描述的方式...
有人可以给我提示或教程来做这样的事情吗?
谢谢。
pynput
可以 运行 一个函数 on press
和另一个 on release
并且两个函数都可以将当前时间保存在两个变量中。如果你在一个函数中减去它们,那么你应该得到按下的时间,如果你在其他函数中减去它们,那么你应该得到释放的时间。
在代码中,我检查了任何键之间的时间,也检查了每个键的时间。
from pynput import keyboard
import datetime
# --- data ---
press_time = None
release_time = None
keys_press_time = {}
keys_release_time = {}
# --- functions ---
def press(key):
global press_time
press_time = datetime.datetime.now()
if release_time:
print('how long was released:', press_time - release_time, 'key: ANY')
# --- individual keys ---
keys_press_time[key] = press_time
if key in keys_release_time:
print('how long was released:', keys_press_time[key] - keys_release_time[key], 'key:', str(key))
def release(key):
global release_time
release_time = datetime.datetime.now()
if press_time:
print('how long was pressed :', release_time - press_time, 'key: ANY')
# --- individual keys ---
keys_release_time[key] = release_time
if key in keys_press_time:
print('how long was pressed :', keys_release_time[key] - keys_press_time[key], 'key:', str(key))
# --- main ---
with keyboard.Listener(on_press=press, on_release=release) as listener:
# ... other code ...
listener.join()
唯一的问题是,当您将某些密钥保留得更长时,系统开始重复密钥(它会生成 release
事件),然后它会提供更短的时间。它需要关闭系统中的“重复”,或者需要更复杂的代码来减少这个问题。
顺便说一句: 我想你可以用非常相似的方式对 jnativehook
做同样的事情。