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.
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:
- Biztonságos tárolás kulcsokat.
- Titkosítási kulcs.
- 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.