小编Mar*_*gin的帖子

使用Android Keystore进行Spongy Castle RSA加密/解密

尝试使用SpongyCastle为RSA/ECB/OAEPwithSHA-512andMGF1Padding所有受支持的Android设备版本上的非对称加密/解密任务提供首选加密算法并出现问题.

加密似乎工作正常.但解密证明有些麻烦:

No provider for RSA/ECB/OAEPwithSHA-512andMGF1Padding

KeyGen规格如下:

val generatorSpec = KeyPairGeneratorSpec.Builder(context)
            .setAlias(ALIAS)
            .setSubject(X500Principal(ASYMMETRIC_KEY_COMMON_NAME_PREFIX + ALIAS))
            .setSerialNumber(BigInteger.TEN)
            .setStartDate(creationDate.time)
            .setEndDate(expiryDate.time)
            .build()

    val keyPairGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore")
    keyPairGenerator.initialize(generatorSpec)

    keyPairGenerator.generateKeyPair()
Run Code Online (Sandbox Code Playgroud)

我现在从keyStore中获取此值并尝试将其用于解密/加密:

private fun rsaEncrypt(data: ByteArray, key: KeyStore.PrivateKeyEntry): ByteArray {
    val encryptionCipher = Cipher.getInstance("RSA/ECB/OAEPwithSHA-512andMGF1Padding", "SC")
    encryptionCipher.init(Cipher.ENCRYPT_MODE, key.certificate.publicKey)

    val outputStream = ByteArrayOutputStream()

    val cipherOutputStream = CipherOutputStream(outputStream as OutputStream, encryptionCipher)
    cipherOutputStream.write(data)
    cipherOutputStream.close()

    return outputStream.toByteArray()
}
Run Code Online (Sandbox Code Playgroud)

似乎工作正常,但解密是我的问题所在:

private fun rsaDecrypt(data: ByteArray, key: KeyStore.PrivateKeyEntry): ByteArray {
    val decryptionCipher = Cipher.getInstance("RSA/ECB/OAEPwithSHA-512andMGF1Padding", "SC")
    decryptionCipher.init(Cipher.DECRYPT_MODE, key.privateKey)

   // Rest …
Run Code Online (Sandbox Code Playgroud)

encryption android bouncycastle kotlin spongycastle

6
推荐指数
1
解决办法
857
查看次数

标签 统计

android ×1

bouncycastle ×1

encryption ×1

kotlin ×1

spongycastle ×1