Переведите пожалуйста с php на java
define('DOC_ROOT', $_SERVER['DOCUMENT_ROOT'].'/typing');
define('TEMPLATES_DIR', DOC_ROOT.'/tpls');
define('TEMPLATE_LENGTH', 14);
define('STUDENT_Z', 2.1);
/*
* Класс, моделирующий пользователя.
* NAME - имя пользователя
* PAUSES_ORIG - массив, в котором содержатся цифровые образы
* клавиатурных почерков
* PAUSES - "очищенный" от грубых ошибок массив PAUSES_ORIG
* STEPS - количество образов в PAUSES_ORIG
*
* Класс позволяет моделировать систему биометрической регистрации и
* аутентификации пользователей на основе клавиатурного почерка
*/
class User {
public $NAME; // Имя пользователя
public $PAUSES_ORIG; // массив векторов временных задержек
public $PAUSES; // «очищенный» массив векторов
public $STEPS; // количество попыток набора фразы
function __construct($userName) {
$file = TEMPLATES_DIR.'/'.$userName.'.dat.csv';
$this->NAME = $userName;
$f = file($file); $n = sizeof($f);
$samples = array();
for($i = 0; $i < $n; $i++) {
$f[$i] = trim($f[$i]);
if($f[$i] == '') continue;
$f[$i] = explode(';', $f[$i]);
$time = $f[$i][0];
$pauses = array_slice($f[$i], 1, 14);
$samples[] = $pauses;
}
$this->PAUSES_ORIG = $samples;
$this->PAUSES = $samples;
$this->STEPS = sizeof($this->PAUSES);
$this->ClearBigErrors();
}
/*
* Регистрация пользователя в системе
* Структура таблицы БД:
* id - идентификатор записи (unsigned int auto increment)
* name - имя пользователя (varchar(45))
* pauses - шаблон (varchar(255)). Используется исключительно
* в экспериментальных целях. В реальных системах на основе ГКПНД
* данное поле следует удалить
* corrections - вектор исправляющих способностей для каждой координаты
* в шаблоне
* v - вектор "открытых" строк
* u - ключевая последовательность
* как и в случае с шаблоном, данная строка используется
* исключительно в исследовательских целях и должна быть удалена
* в реальных системах
* pwd - значение ХЭШ-функции md5 от ключевой строки
*/
function Register() {
$name = $this->NAME;
$pauses = $this->AveragePauses();
$corrections = $this->Correctivity(32);
$v = array(); $u = array();
for($i = 0; $i < TEMPLATE_LENGTH; $i++)
$u[$i] = rand(0, 800);
$encoded = User :: EncodeSample($u, $corrections);
for($i = 0; $i < TEMPLATE_LENGTH; $i++)
$v[$i] = $encoded[$i] + $pauses[$i];
$sqlConn = mysql_connect('localhost', 'root', '');
mysql_select_db('typing', $sqlConn);
$pause = implode(',', $pauses);
$corr = implode(',', $corrections);
$u = implode(',', $u);
$v = implode(',', $v);
$sql = sprintf("INSERT INTO users(name, pauses, corrections, v, u, pwd)
VALUES('%s', '%s', '%s', '%s', '%s', '%s')",
$name, $pause, $corr, $v, $u, md5($u)
);
mysql_query($sql, $sqlConn) or die(mysqL_error());
}
/*
* Аутентификация пользователя по предъявленному им почерку
* После обращения к БД и получения оттуда вектора "открытых" строк
* и вектора исправляющих способностей кодов происходит вычисление
* вектора ключевых значений, вычисление значения хэш-функции от него
* и сравнение результата с хранимым в БД значением.
* В случае успеха функция возвращает true, иначе - false
*/
function Auth($pauses) {
$name = $this->NAME;
$sql = sprintf("SELECT * FROM users WHERE name = '%s'", $name);
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) == 0) die("Нет такой записи. ".$sql);
$a = mysql_fetch_array($res);
$v = explode(',', $a['v']);
for($i = 0; $i < TEMPLATE_LENGTH; $i++) $v[$i] -= $pauses[$i];
$corr = explode(',', $a['corrections']);
$pwd = $a['pwd'];
$u = implode(',', User :: DecodeSample($v, $corr));
$dpwd = md5($u);
if($pwd == $dpwd) return true;
else return false;
}/*
* Процедура идентификации.
* Аналогична процедуре аутентификации с той лишь разницей, что
* процедура аутентификации проводится в отношении всех пользователей
* в системе, за исключением самого пользователя
* Цель создания данной процедуры - получение статистических данных
* относительно ошибок второго рода
*/
function Ident($pauses) {
$name = $this->NAME;
$sql = sprintf("SELECT * FROM users WHERE name <> '%s'", $name);
$res = mysql_query($sql) or die(mysql_error());
while($a = mysql_fetch_array($res)) {
$v = explode(',', $a['v']);
for($i = 0; $i < TEMPLATE_LENGTH; $i++) $v[$i] -= $pauses[$i];
$corr = explode(',', $a['corrections']);
$pwd = $a['pwd'];
$u = implode(',', User :: DecodeSample($v, $corr));
$dpwd = md5($u);
if($pwd == $dpwd) return true;
else return false;
}
}