首页 > 解决方案 > 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 是罪魁祸首,但是......好吧,任何帮助或洞察力将不胜感激。

标签: androidcryptographytink

解决方案


推荐阅读