1

编辑:这似乎是特定于设备的。我有一个模拟器,它发生在一个模拟器上,它按我的预期工作。想要一个普遍的答案,但也许没有?

经历一些我认为有点奇怪的事情。我创建了一个需要用户凭据的 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()

谢谢

4

1 回答 1

1

事实证明这是一个特定于设备的错误。无论出于何种原因,我拥有和正在使用的测试设备在这些情况下都不允许指纹解锁。它与其他设备按预期工作。

于 2019-08-26T12:53:18.740 回答