为什么KeyPairGeneratorSpec在API < 24上抛出InvalidAlgorithmParameterException异常

4
当我在API 24中使用KeyPairGeneratorSpec对象时,我的类可以正常工作。
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(this)
                    .setAlias(KEY_ALIAS)
                    .setSubject(new X500Principal("CN=" + KEY_ALIAS))
                    .setSerialNumber(BigInteger.TEN)
                    .setStartDate(start.getTime())
                    .setEndDate(end.getTime())
                    .build();
            KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA);
            kpg.initialize(spec);
            keyPair = kpg.generateKeyPair();

在低于 24 的编译环境中,我遇到了以下错误:
java.security.InvalidAlgorithmParameterException: Only RSAKeyGenParameterSpec supported

我不明白,因为KeyPairGeneratorSpec应该从API 18可用?


这里也有同样的问题,你找到了一种(优雅的)解决方法吗? - Xvolks
2
@Xvolks,我记不太清我是怎么修复它的了,你能试着在getInstance方法中添加这个参数吗?:KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA, ANDROID_KEYSTORE);私有静态常量ANDROID_KEYSTORE = "AndroidKeyStore"。 - Greg
1个回答

4

今天早些时候我也遇到了这个问题,使用Pixel模拟器(API 23)会引发“仅支持RSAKeyGenParameterSpec”异常,而Nexus 5X(API 24)则没有问题。

可以确认的是,修复方法是根据@estoke上面提到的,在调用KeyPairGenerator的getInstance时将“AndroidKeyStore”作为第二个参数添加:

即:

KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");


我不知道为什么在API 29模拟器上会出现相同的错误。实施一个针对API 23及以下版本设计的解决方案是没有意义的... 不确定发生了什么事情。 - Maximiliano Ambrosini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接