Android ujjlenyomat api Erősítse ujjlenyomat-felismerő hitelesítés

Android ujjlenyomat API: Erősítse ujjlenyomat-felismerő hitelesítés 19

  • 20.12.16 08:14 •
  • nullpex •
  • • # 317706
  • • Habrahabr
  • készítése •
  • 0 •
  • 4600

- mint a Forbes, csak jobb.

Hi, Habr! Beletelt elég hosszú ideig, milyen volt ujjlenyomat API az Android, a hálózat sok különböző minta kódját annak végrehajtására és használatára, de ügyéről, valamilyen oknál fogva, ez a téma, hogy kerek. Véleményem szerint ez az ideje, hogy helyes ez a félreértés. Érdekelt valamennyi kér egy macska.

Android ujjlenyomat api Erősítse ujjlenyomat-felismerő hitelesítés


A legrövidebb oktatási program


Szóval, mi az a Fingerprint API? Az API lehetővé teszi a felhasználó számára, hogy azonosítsák magukat a nyomot, nyilván. Együttműködik az API-érzékelő kínál nekünk FingerprintManager. nagyon könnyű megtanulni.

Hogyan kell használni? De ez érdekes. Szinte mindenhol, ahol jelszavas hitelesítést, akkor döntetlen az ujjlenyomat-hitelesítés. Tekintsünk egy alkalmazás, amely áll LoginActivity és MainActivity. Indításkor eljutunk a bejelentkező képernyő, adja meg a PIN-kódot, menjen át az adatokat. De szeretnénk cserélni a belépés egy PIN-kódot a bevitt ujjlenyomat. By the way, nem egészen kap egy csere, csak akkor tudjuk menteni a felhasználó manuálisan egy PIN kód beírása, hogy ebben az esetben a korábban tárolt PIN (azaz a kliens-szerver alkalmazás, amelyben azt szeretnénk, hogy elküldi a jelszót szerver).

Amennyiben az érzékelő?


Kezdeni, hogy a nyereség az új API, az első dolog, meg kell adni engedélyt az nyilvánvaló:


Persze, hogy az ujjlenyomat-API csak akkor lehetséges támogató eszközökön is: ennek megfelelően az Android 6+ készülék egy érzékelő.

Kompatibilitás könnyen ellenőrizhető eljárás alkalmazásával:


FingerprintManagerCompat - egy kényelmes wrapper a szokásos FingerprintManager'a. amely egyszerűsíti kompatibilitási próba készüléket kapszulázó egy teszt verziója az API. Ebben az esetben a isHardwareDetected () false. Ha kevesebb, mint 23 API-t.

Ezután meg kell értenünk, hogy az érzékelő készen áll a használatra. Ehhez meghatározza a enum kimondja:


És az általunk használt módszer:


Kód elég triviális. Kis félreértések okozhat, amikor ellenőrizzük, hogy a készülék le van zárva. Meg kell ezt a tesztet, mintha Android, és lehetővé teszi, hogy adjunk ujjlenyomatok nem biztonságos eszköz, néhány gyártó megkerülni ezt, így nem zavarja a biztonság kedvéért.

Használhatja a különböző államok érdekében, hogy a felhasználó tudja, hogy mi folyik itt, és küldje el a helyes utat.

edzés


Tehát, nem tér ki a hitelesítési PIN érvényességét, számolja fel a következő egyszerűsített cselekvési logika:

  • A felhasználó beírja a PIN, ha SensorState.READY. Fenntartjuk a PIN-kódot, fuss MainActivity.
  • Indítsa újra az alkalmazást, ha SensorState.READY. akkor olvassa el az ujjlenyomat, húzza ki a pin kódot, szimulálják a bemeneti, fuss MainActivity.

A program végrehajtása nem lenne elég egyszerű, ha nem lenne egy dolog: Google határozottan javasolja, hogy ne tárolja a felhasználó személyes adatait az egyértelmű. Ezért van szükség egy olyan mechanizmust, hogy titkosítani és visszafejteni, illetve megőrzését és használatát. Csináljuk.

Mire van szükségünk, hogy titkosítani és visszafejteni:

  1. Biztonságos tárolás kulcsokat.
  2. Titkosítási kulcs.
  3. titkosírás szakértő


Az ujjlenyomat-rendszer biztosítja számunkra a keystor - „AndroidKeyStore”, és védelmet biztosít a jogosulatlan hozzáférés ellen. Használjuk őket, hogy:


Kell tenni, hogy megértsék, és bocsásd meg, hogy keystor csak tárolja a titkosítási kulcsokat. Jelszavak, PIN-kód és egyéb személyes adatok nem tárolhatók ott.


A választás van két változat a gombok: szimmetrikus kulcs és egy pár nyilvános és titkos kulcsokat. Okokból fogjuk használni egy pár UX. Ez lehetővé teszi számunkra, hogy külön az ujjlenyomat bemenet a titkosító PIN kódot.

Keys, mi lesz kijutni keystora, de először meg kell őket oda. generátor fogja használni, hogy létrehoz a kulcsot.


Abban az inicializálás, mi határozza meg, hogy mi fog keystor előállított kulcsok bármely algoritmus a kulcs.

Az ugyanazon generáció a következőképpen történik:


Itt meg kell figyelni, hogy két helyen:

  • KEY_ALIAS - kulcsfontosságú alias, amelyre akkor húzza ki keystora, hétköznapi SVPSZ.
  • .setUserAuthenticationRequired (true) - ez a zászló azt jelzi, hogy minden alkalommal, amikor ki kell használni a kulcsot, akkor kell, hogy erősítse meg magukat, a mi esetünkben - segítségével a nyomat.

Ellenőrizzük kulcsfontosságú lesz az alábbiak szerint:

titkosírás szakértő


A titkosítás és visszafejtés Java már Cipher objektumot.


Hells mishmash érv - egy string átalakítása, amely tartalmaz egy algoritmust. keverési módot, és kívül.

Amint megvan a futamot. el kell készíteni a használatra. Létrehozásakor a legfontosabb, azt mondtuk, hogy csak akkor tudunk használni, hogy titkosítani és visszafejteni. Ennek megfelelően a rejtjel is erre a célra:


ahol initDecodeCipher () és initEncodeCiper () a következő:

Ez könnyű észrevenni, hogy titkosítja rejtjel valamivel bonyolultabb inicializálni. Ez az iskola a Google, amelynek lényege az, hogy a nyilvános kulcs szükségessé a felhasználó jóváhagyása. Mi megkerülni ezt a követelményt révén az öntött kulcs (mankó. Aha).

Pillanatot KeyPermanentlyInvalidatedException - ha valamilyen okból a kulcsot nem lehet használni, hogy a tüzek kivételt. Lehetséges okok - egy új, ujjlenyomat egy meglévő, módosítása vagy teljes eltávolítása az elzáródás. Aztán egy kulcs nincs értelme tárolni, és távolítsa el.


A módszer, amely összegyűjti az összes készítmény a lánc:

Titkosítás és dekódolás


Egy olyan eljárásra, amely titkosítja a húr érv:


Az eredmény egy Base64 Többsoros hogy biztonságosan lehet tárolni preferensah alkalmazás.

Visszafejteni a következő módszert használja:


Hoppá, a fogadott bemenő nemcsak a titkosított szöveg, de Cipher objektumot. Hol jött, akkor világossá vált később.

Nem az ujj


Annak érdekében, hogy végre használni az érzékelő, akkor kell használni a módszert FingerprintManagerCompat:


Hendler és zászlók, most nem kell a jelet használják, hogy megszünteti az ujjlenyomat-olvasó módban (ha minimalizált alkalmazások, például), visszahívások eredményét adja vissza egy adott olvasó, de több kriptoobektom részletesebben.

CryptoObject ebben az esetben használják a wrapper Cipher'a. Ahhoz, hogy ez, mi használjuk a módszert:


Mint látható, a kód létrehozott kriptoobekt rasshifrovyvayuschegoCipher. Ha a rejtjel most küldeni dekódolni () metódust. hogy légy kivétel, amelyben értesíti, hogy megpróbáljuk használni a kulcsot megerősítés nélkül.

Ha getCryptoObject () által visszaadott null. ez azt jelenti, hogy az inicializálás CHIPER „, és nem volt KeyPermanentlyInvalidatedException. Nem volt mit tenni, de hagyja, hogy a felhasználó tudja, hogy a bevitt ujjlenyomat nem áll rendelkezésre, és ez lesz, hogy újra adja meg a PIN-kódot.

Mint már mondtam, az érzékelő az eredmények leolvasása is útban visszahívások. Itt van, hogyan néznek ki:


Abban az esetben sikeres felismerés jutunk AuthenticationResult. ahonnan tudjuk, hogy a rejtjel tárgy c megerősítette a legfontosabb:

Köszönöm a figyelmet.