android - AndroidKeyStore 没有这样的提供者
问题描述
我只是想获得一个Android Key Store 系统的基本示例来生成对称密钥。我按照教程中的示例(使用 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。提供者 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 存在一个错误,我在最初的问题中没有提到。
看这里:
推荐阅读
- r - 获取与值匹配的 data.table 列的索引
- python-3.x - 仅使用 Pymongo 获取关于(时间或 ID)的最新文档
- javascript - 带有装饰器的 JS 验证
- spring - 如何在 Spring 集成 ServiceActivator 上触发多个输出通道?
- android - DatagramSocket 在 Android 9 上没有接收到一些数据包
- css - 试图向我的 CSS 添加代码但它不起作用
- function - Fortran 函数返回可分配数组
- windows-subsystem-for-linux - 在目录中打开 wsltty
- c# - 这是n加1的问题吗?单个请求中的多个 DbContext 调用
- c# - 我的 UserControl 中的 DependencyProperty 设置和回调没有发生