AndroidKeyStore没有这样的提供者

时间:2019-06-18 17:22:40

标签: android android-keystore java-security

我只是想获取Android Key Store system的基本示例以生成对称密钥。我遵循了教程中的示例(使用Kotlin),但是出现了这样的错误:

  

java.security.NoSuchProviderException:没有此类提供程序: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提供程序。尝试过后,我将对其进行更新。

1 个答案:

答案 0 :(得分:0)

我发现在将AndroidKeyStore与单元测试一起使用时存在一个错误,这在我最初的问题中没有提到。

查看此处:

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