android.security.KeyStoreException:无效的用户身份验证有效期

时间:2018-08-21 14:16:14

标签: android keystore android-keystore

在我的应用中使用android keystore时,我遇到一个奇怪的问题。

仅在 Mi设备上发生(与Mi A1和Redmi Note 4型号一起尝试过)。

这是我生成要存储在androidkeystore中的密钥的方式:

final SecretKey secretKey;
        final KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
        final KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder("alias",
            KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
            .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
            .setUserAuthenticationRequired(true)
            .setUserAuthenticationValidityDurationSeconds(5)
            .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
            .setRandomizedEncryptionRequired(false)
            .build();
        keyGenerator.init(keyGenParameterSpec);
        secretKey = keyGenerator.generateKey();

现在在使用时,如果我在1秒钟的间隔后多次重复使用该键,

间歇地看到以下运行时异常:

android.security.KeyStoreException: Invalid user authentication validity duration
        at android.security.KeyStore.getKeyStoreException(KeyStore.java:692)
        at android.security.KeyStore.getInvalidKeyException(KeyStore.java:777) 
        at android.security.keystore.KeyStoreCryptoOperationUtils.getInvalidKeyExceptionForInit(KeyStoreCryptoOperationUtils.java:54) 
        at android.security.keystore.KeyStoreCryptoOperationUtils.getExceptionForCipherInit(KeyStoreCryptoOperationUtils.java:89) 
        at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:265) 
        at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:148) 
        at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2659) 
        at javax.crypto.Cipher.tryCombinations(Cipher.java:2556) 
        at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider(Cipher.java:2475) 
        at javax.crypto.Cipher.chooseProvider(Cipher.java:566) 
        at javax.crypto.Cipher.init(Cipher.java:973) 
        at javax.crypto.Cipher.init(Cipher.java:908) 

IMO,这似乎是Mi提供程序的错误。

任何帮助/解决方法将不胜感激。

0 个答案:

没有答案