在Android 8上更新后,当我尝试创建新密钥以便在指纹身份验证后使用它时,我得到 android.security.KeyStoreException:需要用户身份验证。 在更新到8之前,它按预期工作。 这并非在每台设备上都会发生。
mKeyStore.load(null);
KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder(
alias,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT | KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
.setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
.setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
.setBlockModes(KeyProperties.BLOCK_MODE_ECB)
.setUserAuthenticationRequired(userAuthenticationRequired)
.setKeyValidityEnd(calendar.getTime())
.setKeySize(keysize)
.build();
mKeyPairGenerator.initialize(spec);
KeyPair keyPair = mKeyPairGenerator.generateKeyPair();//this is the line I'm getting the keystore exception
答案 0 :(得分:0)
我们已将此问题缩小为S9 Android 8设备未使用PIN,图案或密码进行保护。
一种解决方案是将ProviderException添加到围绕generateKeyPair的try catch块中并在那里进行处理。
或者,您可以使用KeyguardManager.isKeyguardSecure()防止生成密钥。