· 7 years ago · Jan 11, 2019, 09:02 AM
1package com.example.admin.fingerprintapp;
2
3import android.Manifest;
4import android.app.KeyguardManager;
5import android.content.pm.PackageManager;
6import android.hardware.fingerprint.FingerprintManager;
7import android.security.keystore.KeyGenParameterSpec;
8import android.security.keystore.KeyProperties;
9import android.support.v4.app.ActivityCompat;
10import android.support.v7.app.AppCompatActivity;
11import android.os.Bundle;
12import android.widget.Toast;
13
14import java.io.IOException;
15import java.security.InvalidAlgorithmParameterException;
16import java.security.InvalidKeyException;
17import java.security.KeyStore;
18import java.security.KeyStoreException;
19import java.security.NoSuchAlgorithmException;
20import java.security.NoSuchProviderException;
21import java.security.UnrecoverableKeyException;
22import java.security.cert.CertificateException;
23
24import javax.crypto.Cipher;
25import javax.crypto.KeyGenerator;
26import javax.crypto.NoSuchPaddingException;
27import javax.crypto.SecretKey;
28
29public class MainActivity extends AppCompatActivity
30{
31
32 private static final String KEY_NAME = "example_key";
33 private FingerprintManager fingerprintManager;
34 private KeyguardManager keyguardManager;
35 private KeyStore keyStore;
36 private KeyGenerator keyGenerator;
37 private Cipher cipher;
38 private FingerprintManager.CryptoObject cryptoObject;
39
40 @Override
41 protected void onCreate(Bundle savedInstanceState)
42 {
43 super.onCreate(savedInstanceState);
44 setContentView(R.layout.activity_main);
45 keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
46 fingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);
47
48 if (!keyguardManager.isKeyguardSecure())
49 {
50 Toast.makeText(this, "Lock screen security not enabled in Settings ", Toast.LENGTH_LONG).show();
51 return;
52 }
53
54 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED)
55 {
56 Toast.makeText(this, "Fingerprint permission not enabled ", Toast.LENGTH_LONG).show();
57 return;
58 }
59
60
61 if (!fingerprintManager.hasEnrolledFingerprints())
62 {
63
64 Toast.makeText(this, "Register at least on fingerprint in Settings", Toast.LENGTH_LONG).show();
65 return;
66 }
67
68 GenerateKey();
69 if (ciperInit())
70 {
71 cryptoObject = new FingerprintManager.CryptoObject(cipher);
72 FingerPrintHandler fingerPrintHandler = new FingerPrintHandler(this);
73 fingerPrintHandler.StartAuthentication(fingerprintManager, cryptoObject);
74 }
75 }
76
77 protected void GenerateKey()
78 {
79 try
80 {
81 keyStore = KeyStore.getInstance("AndroidKeyStore");
82 }
83 catch (KeyStoreException e)
84 {
85 e.printStackTrace();
86 }
87
88 try
89 {
90 keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
91 }
92 catch (NoSuchAlgorithmException e)
93 {
94 e.printStackTrace();
95 }
96 catch (NoSuchProviderException e)
97 {
98 e.printStackTrace();
99 }
100
101 try
102 {
103 keyStore.load(null);
104 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());
105 keyGenerator.generateKey();
106 }
107 catch (CertificateException e)
108 {
109 e.printStackTrace();
110 }
111 catch (IOException e)
112 {
113 e.printStackTrace();
114 }
115 catch (NoSuchAlgorithmException e)
116 {
117 e.printStackTrace();
118 }
119 catch (InvalidAlgorithmParameterException e)
120 {
121 e.printStackTrace();
122 }
123
124 }
125
126 public boolean ciperInit()
127 {
128 try
129 {
130 cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7);
131
132 }
133 catch (NoSuchAlgorithmException e)
134 {
135 e.printStackTrace();
136 return false;
137 }
138 catch (NoSuchPaddingException e)
139 {
140 e.printStackTrace();
141 return false;
142 }
143
144 try
145 {
146 keyStore.load(null);
147 SecretKey key=(SecretKey)keyStore.getKey(KEY_NAME,null);
148 cipher.init(Cipher.ENCRYPT_MODE,key);
149 return true;
150 }
151 catch (CertificateException e)
152 {
153 e.printStackTrace();
154 return false;
155 }
156 catch (IOException e)
157 {
158 e.printStackTrace();
159 return false;
160 }
161 catch (NoSuchAlgorithmException e)
162 {
163 e.printStackTrace();
164 return false;
165 }
166 catch (KeyStoreException e)
167 {
168 e.printStackTrace();
169 return false;
170 }
171 catch (UnrecoverableKeyException e)
172 {
173 e.printStackTrace();
174 return false;
175 }
176 catch (InvalidKeyException e)
177 {
178 e.printStackTrace();
179 return false;
180
181 }
182
183 }
184}