我只是想获取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提供程序。尝试过后,我将对其进行更新。
答案 0 :(得分:0)
我发现在将AndroidKeyStore与单元测试一起使用时存在一个错误,这在我最初的问题中没有提到。
查看此处: