AndroidKeyStore 没有这样的提供者

AndroidKeyStore no such provider

我只是想获取 Android Key Store system 的基本示例以生成对称密钥。我按照教程中的示例(使用 Kotlin)进行了操作,但出现如下错误:

java.security.NoSuchProviderException: no such provider: AndroidKeyStore

下面是编译器抛出错误的代码:

val kpg: KeyGenerator = KeyGenerator.getInstance("DES", "AndroidKeyStore")

在我的 Gradle 上,我使用的 compileSdkVersion 和 targetSdkVersion 为 28。我的 minSdkVersion 也为 25。所有这些都应该满足 Android 关于使用 AndroidKeyStore(最低 API 级别 18)。

如果我删除提供商,一切都会按计划进行,因为我假设它转到默认提供商。当我尝试 AndroidKeyStore 提供程序时,KeyPairGenerator 和 KeyStore 类 也是如此。

我是否使用了错误的提供商关键字?还是我应该做一些额外的设置?

谢谢,

更新 1 - 所以我一直在搜索,发现您可以在我的系统上获得可用提供商的列表。下面是我的代码:

for (p in Security.getProviders()) {
        //Log.d(TAG, String.format("== %s ==", p.getName()))
        println(String.format("== %s ==", p.getName()))
        println(String.format("%s", p.info))
//            for (s in p.getServices()) {
//                //Log.d(TAG, String.format("- %s", s.getAlgorithm()))
//                println(String.format("- %s", s.getAlgorithm()))
//            }
    }

此外,结果与我的 $JAVA_HOME/jre/lib/security.java.security 文件中的内容匹配:

security.provider.1=sun.security.provider.Sun security.provider.2=sun.security.rsa.SunRsaSign security.provider.3=sun.security.ec.SunEC security.provider.4=com.sun.net.ssl.internal.ssl.Provider security.provider.5=com.sun.crypto.provider.SunJCE security.provider.6=sun.security.jgss.SunProvider security.provider.7=com.sun.security.sasl.Provider security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI security.provider.9=sun.security.smartcardio.SunPCSC security.provider.10=apple.security.AppleProvider

所以我想我的选择是向其中添加 AndroidKeyStore 提供程序。当我尝试过时,我会更新这个。

我发现目前在单元测试中使用 AndroidKeyStore 时存在错误,我在最初的问题中没有提到。

看这里:

https://github.com/robolectric/robolectric/issues/1518