我正在尝试使用导入的密钥库密钥对一段数据进行签名:
我的密钥首先在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密钥签名?
https://markmail.org/message/4omngfbqzdq3wk3b#query:+page:1+mid:ne47xbhggf6samib+state:results