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 时存在错误,我在最初的问题中没有提到。
看这里:
我只是想获取 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 时存在错误,我在最初的问题中没有提到。
看这里: