如何解决使用新的androidx.BiometricPrompt
我正在使用新的androidx.BiometricPromt
库来实现带指纹的身份验证。如果用户添加了新指纹或删除了一个指纹,我想使密钥失效。我正在创建这样的密钥:
fun getSecretKey(shouldCreate: Boolean): Key {
val keyStore = KeyStore.getInstance(ANDROID_KEYSTORE)
keyStore.load(null)
return if (shouldCreate) {
createSecretKey(keyStore)
} else {
keyStore.getKey(ALIAS_BIOMETRICS,null)
}
}
private fun createSecretKey(keystore: KeyStore): Key {
val builder = KeyGenParameterSpec.Builder(
ALIAS_BIOMETRICS,KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.setUserAuthenticationRequired(true)
.setUserAuthenticationValidityDurationSeconds(5)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
builder.setInvalidatedByBiometricEnrollment(true)
builder.setUserAuthenticationValidWhileOnBody(true)
}
val keyGenerator =
KeyGenerator.getInstance(keyAlgorithm,keystore.provider)
keyGenerator
.init(builder.build())
return keyGenerator.generateKey()
}
我正在开始像这样的生物识别扫描过程:
val info = BiometricPrompt.PromptInfo.Builder()
.setTitle(context.getString(R.string.biometric_dialog_title))
.setSubtitle(context.getString(R.string.biometric_dialog_subtitle))
.setNegativeButtonText(context.getString(R.string.biometric_dialog_cancel))
.build()
biometricPrompt = when (screen) {
is FragmentActivity -> BiometricPrompt(screen,{ it.run() },this)
is Fragment -> BiometricPrompt(screen,this)
else -> throw IllegalArgumentException("Screen type must be FragmentActivity or Fragment")
}
biometricPrompt?.authenticate(info)
我想启动biometricPromt?.authenticate(info,cryptoObject)
,但是在这种情况下,我需要初始化Cipher并抛出异常UserNotAuthenticated
。用户成功扫描生物特征之后,我将创建SecretKey并用于加密。然后,我要更改指纹(添加一些新指纹并删除)。解密过程像加密一样,但仅在获取密钥时,我不是在创建新密钥,而是从密钥库中获取它。尽管我更换了指纹,但一切正常。
如果用户更改了设备中的指纹,我想拒绝解密。如何使用androidx.BiometricPrompt库实现此功能?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。