val executor = Executors.newSingleThreadExecutor()
val biometricPrompt = BiometricPrompt.Builder(this)
.setTitle("指纹认证")
.setSubtitle("请使用指纹进行身份验证")
.setDescription("将您的指纹放置在传感器上")
.setNegativeButton("取消", executor,
DialogInterface.OnClickListener { _, _ ->
})
.build()
val callback = @RequiresApi(Build.VERSION_CODES.P)
object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
val cryptoObject = result.cryptoObject
}
override fun onAuthenticationFailed() {
}
}
val keyStore = KeyStore.getInstance("AndroidKeyStore")
keyStore.load(null)
val keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
val builder = KeyGenParameterSpec.Builder(
"biometric_key",
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
builder.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
builder.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
keyGenerator.init(builder.build())
keyGenerator.generateKey()
val cipher = Cipher.getInstance(
KeyProperties.KEY_ALGORITHM_AES + "/"
+ KeyProperties.BLOCK_MODE_CBC + "/"
+ KeyProperties.ENCRYPTION_PADDING_PKCS7
)
val key = keyStore.getKey("biometric_key", null) as SecretKey
cipher.init(Cipher.ENCRYPT_MODE, key)
val cryptoObject = BiometricPrompt.CryptoObject(cipher)
biometricPrompt.authenticate(cryptoObject, CancellationSignal(), executor, callback)