适配Android 9预览版时生成KeyPair报错求助
解决Android 9预览版生成RSA密钥对的错误问题
嘿,我之前适配Android 9(Pie)预览版时也碰到过类似的密钥对生成问题,大概率是因为Android 9对AndroidKeyStore的参数校验变得更严格了,给你几个排查和解决的方向:
1. 补全必填的加密填充参数
你代码里的setAlgorithmParameter...看起来没写完,Android 9明确要求RSA密钥必须指定加密填充方式,不能留空。推荐使用安全的OAEP填充,示例代码如下:
keyPairGenerator.initialize( new KeyGenParameterSpec.Builder( alias, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP) // 其他需要的参数继续补充 .build() );
如果同时用到加密和解密用途,要确保填充方式是两者都支持的,RSA_OAEP是当前比较合规的选择。
2. 确认密钥长度符合要求
Android 9对RSA密钥大小有更严格的限制,建议使用2048位或以上的密钥长度,1024位密钥在新版本中可能会被直接拒绝。可以在初始化时明确指定:
.setKeySize(2048)
3. 验证密钥库提供者的正确性
确保你引用的SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE对应的值是"AndroidKeyStore",如果常量定义有问题,直接写字符串试试:
KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");
4. 排查用户授权相关配置
如果你的requireAuth是用来开启生物识别授权的(比如调用setUserAuthenticationRequired(true)),Android 9预览版对生物识别的权限和设备兼容性要求有变化,要确保设备支持对应的生物识别功能,并且已授予相关权限。
另外,一定要捕获具体的异常(比如InvalidAlgorithmParameterException、NoSuchAlgorithmException),这些异常的详细信息会直接告诉你哪个参数不符合要求,比盲目排查高效得多。
内容的提问来源于stack exchange,提问作者João Silva
相关产品推荐
相关产品推荐

