Здравствуйте.
Можно ли в Java получить уникальный идентификатор, или хэш (короче грубо говоря последовательность байтов) от пальца при работе с Android Fingerprint API?
Fingerprint Api в Android не отдаёт никаких данных о снятом отпечатке. Вся работа с ним происходит исключительно внутри SDK.
К тому же, такого понятия, как хеш (уид) для отпечатка пальца не существует. При снятии отпечатка, он переводится в набор характерных признаков, называемых минуши (количество, характер линий, координаты, углы излома). При следующем сканировании набор этих признаков будет другим, так как мы можем сдвинуть палец, приложить его под другим углом и т.д. При сравнении наборов, ищутся соответствия признаков и если их количество превышает определённый порог, то считается, что отпечатки идентичны.
Таким образом, даже если преобразовать исходный отпечаток в некий УИД, он будет бесполезен, потому что практически никогда не будет совпадать с полученным УИД при повторном сканировании.
Не совсем согласен с предыдущим ответом, так как можно сказать, что у отпечатка пальцев в системе есть ID. Например, если вывести содержимое файла /data/system/users/0/settings_fingerprint.xml, то можно увидеть следующее:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<fingerprints>
<fingerprint fingerId="1" name="Lex 1" groupId="0" deviceId="0" />
<fingerprint fingerId="2" name="Lex 2" groupId="0" deviceId="0" />
<fingerprint fingerId="3" name="Lex 3" groupId="0" deviceId="0" />
<fingerprint fingerId="4" name="Lex 4" groupId="0" deviceId="0" />
</fingerprints>
А если взглянуть на исходники fingerprintd, то можно увидеть в методе void FingerprintDaemonProxy::hal_notify_callback(const fingerprint_msg_t *msg) такой фрагмент кода.
case FINGERPRINT_AUTHENTICATED:
ALOGD("onAuthenticated(fid=%d, gid=%d)",
msg->data.authenticated.finger.fid,
msg->data.authenticated.finger.gid);
if (msg->data.authenticated.finger.fid != 0) {
const uint8_t* hat = reinterpret_cast<const uint8_t *>(&msg->data.authenticated.hat);
instance->notifyKeystore(hat, sizeof(msg->data.authenticated.hat));
}
callback->onAuthenticated(device,
msg->data.authenticated.finger.fid,
msg->data.authenticated.finger.gid);
break;
UPD#1
Для желающих более подробно разобраться с механизмом работы fingerprint в Android рекомендую прочитать эту работу.
Продвижение своими сайтами как стратегия роста и независимости