android - AndroidKeysetManager Builder 与 HybridKeyTemplates 崩溃
问题描述
我有加密/解密数据的 Android 代码。它是一年多前由另一位开发人员(后来他离开了)编写的,直到最近它才开始崩溃,并出现以下异常:
android.security.keystore.AndroidKeyStoreRSAPrivateKey cannot be cast to javax.crypto.SecretKey
这似乎仅在升级应用程序并且现有密钥已经存在时才会发生。我针对之前的版本(有效)运行了 gradle 文件的差异,并且没有更新任何框架/sdk。
异常发生在 .build() 中:
private fun getOrGenerateNewKeysetHandle(alias: String): KeysetHandle {
val keysetName = "${TINK_KEYSET_NAME}_$alias"
return AndroidKeysetManager.Builder()
.withSharedPref(reactApplicationContext, keysetName, PREF_FILE_NAME)
.withKeyTemplate(HybridKeyTemplates.ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM)
.withMasterKeyUri(MASTER_KEY_URI)
.build()
.keysetHandle
}
我将代码跟踪到AndroidKeystoreAesGcm
并且从 getKey 返回的分配发生异常(成功):
public AndroidKeystoreAesGcm(String keyId) throws GeneralSecurityException, IOException {
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null /* param */);
key = (SecretKey) keyStore.getKey(keyId, null /* password */);
}
这让我不确定如何进行。KeyStore 有一个密钥,我需要它来访问应用程序数据。我怀疑我的老宿敌 gradle 是罪魁祸首,但是......好吧,任何帮助或洞察力将不胜感激。
解决方案
推荐阅读
- python - 有没有一种在不暴露 Python 凭据的情况下连接到数据库的好方法?
- mysql - 加快大表SQL查询的方法
- django - 如何将 vue 模板渲染到 django 视图中?
- python - 消息:元素无法滚动到视图中
- linux - Hashcat 不会恢复密码,尽管它们存在于字典中
- python - 检测到的函数也出现无效语法错误
- c - 递归函数打印所有可能的组合
- android - 在 Activity/Fragment 中调用多个挂起函数
- c# - AWS SSM .NET 端口转发本地 RDP
- node.js - 使用 Node 作为后端编写 Dockerfile 的正确方法