Android KeyGenerator抛出ProviderException问题(vivo 1907设备)
vivo 1907(Android 12)设备指纹传感器密钥生成异常
设备信息
- 型号:vivo 1907
- 产品:1907
- 设备:1907
- SDK版本:31
- Android版本:12
问题说明
仅在vivo 1907设备上调用指纹传感器时,出现密钥生成失败的异常,根因提示为Keystore not initialized(密钥库未初始化)。
相关代码片段
private boolean generateKey() { try { keyStore = KeyStore.getInstance("AndroidKeyStore"); } catch (Exception e) { e.printStackTrace(); LogManager.error(TAG + " :: " + " generateKey(): " + " Exception - " + e.getMessage() ); return false; } KeyGenerator keyGenerator; try { keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); } catch (NoSuchAlgorithmException | NoSuchProviderException e) { e.printStackTrace(); LogManager.error(TAG + " :: " + " generateKey(): " + " Error." + " Setting key algorithm failed." + " Exception - " + e.getMessage() ); return false; } try { keyStore.load(null); keyGenerator.init(new KeyGenParameterSpec.Builder(KEY_NAME, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) .setBlockModes(KeyProperties.BLOCK_MODE_CBC) // 要求用户通过指纹认证来授权密钥的每次使用 .setUserAuthenticationRequired(true) .setEncryptionPaddings( KeyProperties.ENCRYPTION_PADDING_PKCS7) .build()); keyGenerator.generateKey(); } catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException | CertificateException | IOException e) { LogManager.error(TAG + " :: " + " generateKey(): " + " Error." + " Generating key failed." + " Exception - " + e.getMessage() ); return false; } return true; }
异常栈信息(翻译后)
java.security.ProviderException: 密钥库密钥生成失败 at android.security.keystore2.AndroidKeyStoreKeyGeneratorSpi.engineGenerateKey(AndroidKeyStoreKeyGeneratorSpi.java:413) at javax.crypto.KeyGenerator.generateKey(KeyGenerator.java:612) at com.qbrik.fingerPrintManager.FingerprintService.generateKey(FingerprintService.java:442) at com.qbrik.fingerPrintManager.FingerprintService.initService(FingerprintService.java:296) at com.qbrik.shaktiapp.LoginPasscodeActivity.triggerFingerprintService(LoginPasscodeActivity.java:442) at com.qbrik.shaktiapp.LoginPasscodeActivity.onShaktiCreate(LoginPasscodeActivity.java:375) at com.qbrik.ShaktiBaseActivity.onCreate(ShaktiBaseActivity.java:338) at android.app.Activity.performCreate(Activity.java:8365) at android.app.Activity.performCreate(Activity.java:8343) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1379) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3912) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4096) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2441) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:233) at android.os.Looper.loop(Looper.java:334) at android.app.ActivityThread.main(ActivityThread.java:8396) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068) Caused by: android.security.KeyStoreException: 密钥库未初始化 at android.security.KeyStore2.getKeyStoreException(KeyStore2.java:332) at android.security.KeyStoreSecurityLevel.handleExceptions(KeyStoreSecurityLevel.java:57) at android.security.KeyStoreSecurityLevel.generateKey(KeyStoreSecurityLevel.java:145) at android.security.keystore2.AndroidKeyStoreKeyGeneratorSpi.engineGenerateKey(AndroidKeyStoreKeyGeneratorSpi.java:400) ... 22 more
解决方案建议
- 单独捕获
KeyStoreException:扩展catch块,捕获该异常并判断是否为"Keystore not initialized",若出现则尝试重新加载KeyStore后重试密钥生成 - 检查密钥是否已存在:在生成新密钥前,先通过
keyStore.containsAlias(KEY_NAME)检查密钥是否已存在,避免重复触发生成逻辑 - 添加重试机制:针对vivo设备的Keystore初始化延迟问题,添加有限次数的重试逻辑,每次重试前等待短时间(如500ms)
- 确认硬件安全模块状态:在调用密钥生成前,确保设备的安全硬件已就绪,可以通过
KeyStore.getInstance("AndroidKeyStore").load(null)的返回状态判断,或使用系统API检查硬件可用性
内容的提问来源于stack exchange,提问作者raj
相关产品推荐
相关产品推荐

