You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

适配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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:19:17