ПредишенСледващото

Android Fingerprint API: Закрепете разпознаване на пръстов отпечатък 19

  • 12.20.16 08:14 •
  • nullpex •
  • • # 317706
  • • Habrahabr
  • Инструкция •
  • 0 •
  • 4600

- като Forbes, само по-добре.

Здравейте, Habr! Отне доста дълго време, как пръстови отпечатъци API за Android, в мрежата на много разнородни примерен код за неговото прилагане и използване, но Хабре, по някаква причина, тази тема се разчуе. По мое мнение, че е време да се коригира това недоразумение. Всички, които се интересуват от иска котка.

Android пръстови отпечатъци API за закопчаване на разпознаване на пръстов отпечатък


Най-краткият образователната програма


Така че, това, което е на пръстов отпечатък API? Този интерфейс позволява на потребителя да се удостовери чрез своя отпечатък, очевидно. За да работите с датчика за API ни предлага FingerprintManager. доста лесно да се учи.

Как да го използвам? Но това е интересно. Почти навсякъде, където удостоверяване с парола, можете да връзвам разпознаване на пръстов отпечатък. Помислете за приложение, което се състои от LoginActivity и MainActivity. При стартиране стигнем до екрана за вход, въвеждате ПИН, проверете данните. Но ние искаме да замени влизането на ПИН код към входния отпечатък. Между другото, да не сме напълно получа ново, ние може да спаси само потребителя от ръчно въвеждане на ПИН код, замествайки предварително запаметената PIN (което означава прилагане на клиент-сървър, на който искате да изпратите сървъра парола).

Когато сензора?


За да започнете да получавате печалба от новия API, първото нещо, което трябва да се добави разрешение в манифеста:


Разбира се, да се използва за пръстови API е възможно само на устройства, които я поддържат: съответно, този Android 6+ устройство с датчик.

Съвместимостта може лесно да се провери като се използва метода:


FingerprintManagerCompat - е удобен обвивка за обичайната FingerprintManager'a. което опростява тест устройство съвместимост с капсулиращ тестова версия на API. В този случай, isHardwareDetected () връща лъжа. ако по-малко от 23 API.

На следващо място, ние трябва да разберем дали сензорът е готов за употреба. За да направите това, да определите ENUM състояния:


И ние използваме метода:


Код е доста тривиално. Малки недоразумения могат да причинят, когато ние проверяваме дали устройството е заключено. Имаме нужда от този тест, като че Android и ви позволява да добавяте пръстови отпечатъци, за да незащитен устройство, някои производители да заобиколят настоящата, така че да не пречат на безопасната страна.

Можете да използвате различни страни, за да позволи на потребителите да знаят какво се случва и да го изпратите на правилния път.

обучение


Така че, не се спирам на ПИН-кода за проверка за валидност, брои до следната опростена логика на действие:

  • Потребителят въвежда ПИН, ако SensorState.READY. ние си запазваме ПИН-кода, стартирайте MainActivity.
  • Рестартирайте приложението, ако SensorState.READY. След това четем на пръстовия отпечатък, издърпайте пин кода, симулират своя принос, стартирайте MainActivity.

Схемата ще бъде достатъчно проста, ако не беше за едно нещо: Google силно препоръчва да не съхраняване на потребителски частни данни в ясно. Ето защо, ние се нуждаем от механизъм за криптиране и декриптиране, съответно, опазване и ползване. Ние го направя.

Какво ни е нужно за криптиране и декриптиране:

  1. Сигурно съхранение на ключове.
  2. Криптографски ключ.
  3. шифровач


Системата за пръстови отпечатъци ни дава keystor - "AndroidKeyStore" и осигурява защита срещу неоторизиран достъп. Ние ги използваме, за да:


Трябва да се вземат, за да се разбере и прости, че keystor само съхранява криптографски ключове. Паролите, ЕГН и други лични данни не могат да се съхраняват там.


Изборът имаме два варианта на бутоните: симетричен ключ и един чифт публични и частни ключове. От съображения, ние ще използваме един чифт UX. Това ще ни позволи да се разделят входа на пръстови отпечатъци от ПИН за криптиране.

Ключове, ние ще се измъкнем от keystora, но първо трябва да ги постави там. генератор ще използва за генериране на ключа.


В инициализация, ние се уточни какво ще keystor генерирани ключове за всеки алгоритъм е ключът.

В същата поколение настъпва, както следва:


Тук трябва да се обърне внимание на две места:

  • KEY_ALIAS - е ключов псевдоним, на която ще го извади от keystora, обикновените psfs.
  • .setUserAuthenticationRequired (вярно) - това указва, че всеки път, ние ще трябва да използвате клавиша, ще трябва да се потвърди, в нашия случай - с помощта на печат.

Проверка за ключ ще бъде, както следва:

шифровач


Криптиране и декриптиране на Java е Cipher обект.


Hells миш-маш от аргумент - преобразуване на низ, който включва един алгоритъм. режим, и добавяне смесване.

След като имаме шифъра. трябва да го подготви за използване. При генериране на ключа, ние казахме, че ще използва само го за криптиране и декриптиране. Съответно, Cipher също ще за тази цел:


където initDecodeCipher () и initEncodeCiper (), както следва:

Лесно е да се забележи, че криптира Cipher е малко по-сложно да се инициализира. Това училище на Google, същността на която е, че публичния ключ изисква потвърждение от потребителя. Ние заобикалят това изискване чрез клавиша за актьорски състав (А-ха патерица.).

Moment с KeyPermanentlyInvalidatedException - ако по някаква причина, ключът не може да се използва, да се задейства изключение. Възможни причини - Добавяне на нов отпечатък на съществуващо, промяна или пълно отстраняване на запушването. Тогава ключова няма смисъл да се съхранява, а ние да я премахнете.


Методът, който събира всички получаването на веригата:

Криптиране и декриптиране


Ние описваме метод, който шифрова аргумент низ:


Резултатът е Base64 -разходка които могат да се съхраняват безопасно в приложение preferensah.

За да декодирате използвайте следния метод:


Ами сега, на входа, които получава не само криптирана низ, но Cipher обекта. Когато дойде, ще стане ясно по-късно.

Не пръста


За да използвате най-накрая на сензора, което трябва да се използва метод FingerprintManagerCompat:


Хендлър и знамена, сега не е нужно, сигналът се използва, за да отмените режима на четец на пръстови отпечатъци (когато е минимизиран приложение, например), обратни повиквания се върнат в резултат на специално четене, но с течение kriptoobektom повече подробности.

CryptoObject в този случай се използва като обвивка за Cipher'a. За да го получите, ние използваме метода:


Както можете да видите от кода, създаден от kriptoobekt rasshifrovyvayuschegoCipher. Ако шифъра точно сега, за да изпратите да декодира () метод. че муха изключение, като уведоми, че ние се опитваме да използвате клавиша без потвърждение.

Ако getCryptoObject () се връща нула. това означава, че инициализация Chiper "и имаше KeyPermanentlyInvalidatedException. Нямаше какво да се направи, освен да позволи на потребителите да знаят, че на входа отпечатък не е на разположение, и ще трябва отново да въведете ПИН кода си.

Както вече казах, сензорът отчитане на резултатите, които получаваме в начина, по който извика. Ето как изглеждат:


В случай на успешно разпознаване стигнем AuthenticationResult. , от които можем да се Cipher обект век потвърди ключа:

Благодаря ви за вниманието.

Подкрепете проекта - споделете линка, благодаря!