#java #android #android_sdk
Здравствуйте. Можно ли в Java получить уникальный идентификатор, или хэш (короче грубо говоря последовательность байтов) от пальца при работе с Android Fingerprint API?
Ответы
Ответ 1
Не совсем согласен с предыдущим ответом, так как можно сказать, что у отпечатка пальцев в системе есть ID. Например, если вывести содержимое файла /data/system/users/0/settings_fingerprint.xml, то можно увидеть следующее:А если взглянуть на исходники 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 (&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 рекомендую прочитать эту работу. Ответ 2
Fingerprint Api в Android не отдаёт никаких данных о снятом отпечатке. Вся работа с ним происходит исключительно внутри SDK. К тому же, такого понятия, как хеш (уид) для отпечатка пальца не существует. При снятии отпечатка, он переводится в набор характерных признаков, называемых минуши (количество, характер линий, координаты, углы излома). При следующем сканировании набор этих признаков будет другим, так как мы можем сдвинуть палец, приложить его под другим углом и т.д. При сравнении наборов, ищутся соответствия признаков и если их количество превышает определённый порог, то считается, что отпечатки идентичны. Таким образом, даже если преобразовать исходный отпечаток в некий УИД, он будет бесполезен, потому что практически никогда не будет совпадать с полученным УИД при повторном сканировании.Ответ 3
Когда вы добавляете в настройках безопасности системы новый отпечаток пальца, создаётся fingerprint key и сохраняется в хранилище. Запись в хранилище, кроме самого ключа, имеет ещё числовой идентификтор, назначаемый по порядку, и необязательное имя. Всё, что можно сделать из приложения - это запросить у системной службы Fingerprint Service есть ли в хранилище такой отпечаток, какой сейчас прижат к сканеру. Нельзя даже определить, какой из ключей хранилища соответствует прижатому в данный момент пальцу. И даже если вы сможете как-то извлечь из хранилища fingerprint key, толку вам от него немного, он пригоден только для проверки данных получаемых от сканера и только на этом же устройстве.
Комментариев нет:
Отправить комментарий