无法通过导入到AndroidKeyStore RSA私钥进行签名

问题描述 投票:1回答:1

我正在尝试使用导入的密钥库密钥对一段数据进行签名:

我的密钥首先在AndroidKeyStore外部生成(这是故意的)然后导入到AndroidKeyStore

使用以下方式:

    val keyGen = KeyPairGenerator.getInstance("RSA")
    keyGen.initialize(2048)
    val keyPair = keyGen.generateKeyPair()

    val keyProtectionSign = KeyProtection.Builder(KeyProperties.PURPOSE_SIGN or //
            KeyProperties.PURPOSE_VERIFY).setDigests(KeyProperties.DIGEST_SHA256) //

            .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1) //
            .setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
            .build()
    keyStore.setEntry(signatureAlias,
            KeyStore.PrivateKeyEntry(keyPair.private, arrayOf(certificate)),
            keyProtectionSign)

此后,我尝试使用密钥进行签名:

val keyStore = KeyStore.getInstance("AndroidKeyStore")
    keyStore.load(null)
    val privateKey = keyStore.getKey(signatureAlias,null)
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initSign(privateKey)
    signature.update(data)
    val sign = signature.sign()

但是,signature.initSign(privateKey)行引发异常:java.security.InvalidKeyException: Supplied key (android.security.keystore.AndroidKeyStoreRSAPrivateKey) is not a RSAPrivateKey instance

如果我不将密钥导入到Android密钥库中,并尝试对此进行签名,则可以使用。

如果我直接在AndroidKeyStore中生成密钥,它也会因相同的错误而失败。

我的代码有什么问题?为什么我不能用我的RSA密钥签名?

android kotlin rsa signing android-keystore
1个回答
0
投票
尝试检查此线程中讨论的问题:

https://markmail.org/message/4omngfbqzdq3wk3b#query:+page:1+mid:ne47xbhggf6samib+state:results

    将BouncyCastle配置为不是顶级提供者。
  1. 调用密钥库的getEntry()方法。
© www.soinside.com 2019 - 2024. All rights reserved.