编辑:这似乎是特定于设备的。我有一个模拟器,它发生在一个模拟器上,它按我的预期工作。想要一个普遍的答案,但也许没有?
经历一些我认为有点奇怪的事情。我创建了一个需要用户凭据的 AndroidKeyStore。因此,当我尝试使用该密钥进行加密时,我得到了异常“UserNotAuthenticatedException”,完美。
然后我启动确认设备凭据:
val keyguardManager = requireContext().getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
val intent = keyguardManager.createConfirmDeviceCredentialIntent(("Test"),"This is the description")
if (intent != null)
startActivityForResult(intent, AUTHENTICATION_REQUEST)
这很完美,在使用 PIN 或指纹解锁后的 onActivityResult ,我回到了成功状态。但是,当我现在尝试再次使用密钥库时:
如果我在凭据屏幕上使用了我的 PIN,我就可以毫无问题地使用密钥库。
如果我在凭据屏幕上使用了我的指纹,它会再次引发“UserNotAuthenticatedException”。而且我基本上可以用指纹无限循环。我是否缺少允许使用指纹的设置或其他内容?我可以用指纹解锁手机本身,这只是我无法通过的密钥库。
val keyGenerator =
KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
val builder = KeyGenParameterSpec.Builder(
alias,
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
builder.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setUserAuthenticationRequired(userAuthenticationRequired)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
builder.setUserAuthenticationValidityDurationSeconds(
userAuthenticationValidityDurationSeconds
)
keyGenerator.init(builder.build())
keyGenerator.generateKey()
谢谢