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

Gre*_*reg 4 android key-pair android-keystore

当我在 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();
Run Code Online (Sandbox Code Playgroud)

在低于 24 的版本上编译时,出现以下错误:

java.security.InvalidAlgorithmParameterException: Only RSAKeyGenParameterSpec supported
Run Code Online (Sandbox Code Playgroud)

我不明白,因为 KeyPairGeneratorSpec 应该可以从 api 18 获得?

cra*_*erm 5

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

可以确认修复是将“AndroidKeyStore”作为第二个参数添加到对 KeyPairGenerator 上 getInstance 的调用中,如上面提到的@estoke:

IE:

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