2016-08-24 6 views
0

私はアンドロイドバイオメトリックインテグレーションの新人です。バイオメトリックとして指紋センサーを使用

Androidデバイス画面または指紋センサーを生体認証デバイスとして使用して、ユーザーがメールやパスワードを使わなくてもアプリにログインできるようにすることはできますか?

thisおよびthisおよびthisを参考にしてください。

外部指紋スキャナまたはバイオメトリックの唯一のオプションを使用していますか、それとも代替ソリューションがありますか?

これは私が参考にしたコードです。それを見て、ユーザーの指紋をどのように得ることができるか教えてください。

MainActivity extends AppCompatActivity { 

private FingerprintManager fingerprintManager; 
private KeyguardManager keyguardManager; 
private KeyStore keyStore; 
private KeyGenerator keyGenerator; 
private static final String KEY_NAME = "example_key"; 
private Cipher cipher; 
private FingerprintManager.CryptoObject cryptoObject; 

@TargetApi(Build.VERSION_CODES.M) 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    keyguardManager = 
      (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    fingerprintManager = 
      (FingerprintManager) getSystemService(FINGERPRINT_SERVICE); 


    if (!keyguardManager.isKeyguardSecure()) { 

     Toast.makeText(this, 
       "Lock screen security not enabled in Settings", 
       Toast.LENGTH_LONG).show(); 
     return; 
    } 

    if (ActivityCompat.checkSelfPermission(this, 
      Manifest.permission.USE_FINGERPRINT) != 
      PackageManager.PERMISSION_GRANTED) { 
     Toast.makeText(this, 
       "Fingerprint authentication permission not enabled", 
       Toast.LENGTH_LONG).show(); 

     return; 
    } 

    if (!fingerprintManager.hasEnrolledFingerprints()) { 

     // This happens when no fingerprints are registered. 
     Toast.makeText(this, 
       "Register at least one fingerprint in Settings", 
       Toast.LENGTH_LONG).show(); 
     return; 
    } 

    if (!fingerprintManager.hasEnrolledFingerprints()) { 

     // This happens when no fingerprints are registered. 
     Toast.makeText(this, 
       "Register at least one fingerprint in Settings", 
       Toast.LENGTH_LONG).show(); 
     return; 
    } 

    generateKey(); 

    if (cipherInit()) { 
     cryptoObject = 
       new FingerprintManager.CryptoObject(cipher); 
     FingerprintHandler helper = new FingerprintHandler(this); 
     helper.startAuth(fingerprintManager, cryptoObject); 
    } 

} 

@TargetApi(Build.VERSION_CODES.M) 
protected void generateKey() { 
    try { 
     keyStore = KeyStore.getInstance("AndroidKeyStore"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    try { 
     keyGenerator = KeyGenerator.getInstance(
       KeyProperties.KEY_ALGORITHM_AES, 
       "AndroidKeyStore"); 
    } catch (NoSuchAlgorithmException | 
      NoSuchProviderException e) { 
     throw new RuntimeException(
       "Failed to get KeyGenerator instance", e); 
    } 

    try { 
     keyStore.load(null); 
     keyGenerator.init(new 
       KeyGenParameterSpec.Builder(KEY_NAME, 
       KeyProperties.PURPOSE_ENCRYPT | 
         KeyProperties.PURPOSE_DECRYPT) 
       .setBlockModes(KeyProperties.BLOCK_MODE_CBC) 
       .setUserAuthenticationRequired(true) 
       .setEncryptionPaddings(
         KeyProperties.ENCRYPTION_PADDING_PKCS7) 
       .build()); 
     keyGenerator.generateKey(); 
    } catch (NoSuchAlgorithmException | 
      InvalidAlgorithmParameterException 
      | CertificateException | IOException e) { 
     throw new RuntimeException(e); 
    } 
} 

@TargetApi(Build.VERSION_CODES.M) 
public boolean cipherInit() { 
    try { 
     cipher = Cipher.getInstance(
       KeyProperties.KEY_ALGORITHM_AES + "/" 
         + KeyProperties.BLOCK_MODE_CBC + "/" 
         + KeyProperties.ENCRYPTION_PADDING_PKCS7); 
    } catch (NoSuchAlgorithmException | 
      NoSuchPaddingException e) { 
     throw new RuntimeException("Failed to get Cipher", e); 
    } 

    try { 
     keyStore.load(null); 
     SecretKey key = (SecretKey) keyStore.getKey(KEY_NAME, 
       null); 
     cipher.init(Cipher.ENCRYPT_MODE, key); 
     return true; 
    } catch (KeyPermanentlyInvalidatedException e) { 
     return false; 
    } catch (KeyStoreException | CertificateException 
      | UnrecoverableKeyException | IOException 
      | NoSuchAlgorithmException | InvalidKeyException e) { 
     throw new RuntimeException("Failed to init Cipher", e); 
    } 
} 
} 
+0

こんにちは@モハメド。 Wellover to stackoverflow。コードの一部を提供し、特定の質問をする必要があります。あなたはコミュニティのことを期待することはできません:私の仕事では、私にこのことを尋ねます。どうしたらいいですか? :)。歓声メイト。 –

+0

eliasMP @私はstackoverflowの仕組みを知らない。 –

+0

こんにちは@mohammedあなたは以下のリンクをチェックすることができます:https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/ http://catb.org/esr/faqs/smart- questions.htmlとStackOverflowフォーラム:http://stackoverflow.com/help/question-bans –

答えて

0

解決策は自分自身を見つけました。バイオメトリックデバイスは指紋が読み取られたときに暗号化されたデータを提供することが分かりました。セキュリティ上の理由から、電話機に存在する通常の指紋センサーはこの暗号化されたデータを提供していないと思います。開発者が指紋センサーで行うことができる最も近いことは、指紋がAndroidデバイスの既に登録されている指紋と一致するかどうかを調べることです。このため、私はサードパーティSDKを使用しなければなりませんでした。

関連する問題