【问题标题】:Why is KeyPairGeneratorSpec throwing InvalidAlgorithmParameterException on API < 24为什么 KeyPairGeneratorSpec 在 API < 24 上抛出 InvalidAlgorithmParameterException
【发布时间】:2017-07-19 19:52:11
【问题描述】:

当我在 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 我不记得我是如何修复它的,您可以尝试将此参数添加到 getInstance 方法吗? : KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA, ANDROID_KEYSTORE);private static final String ANDROID_KEYSTORE = "AndroidKeyStore";

标签: android android-keystore key-pair


【解决方案1】:

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

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

即:

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

【讨论】:

  • 我想知道为什么我在 API 29 模拟器上会发生同样的错误。实施为 API 23 及更低版本设计的解决方案毫无意义……不知道发生了什么。
猜你喜欢
  • 2017-08-13
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多