从密钥库获取 PKCS8 格式的私钥

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

因此,在我的应用程序中,我使用 AES 密钥加密我的数据,并使用 RSA 对加密该密钥。 然后我将该对保存到密钥库中。 从 KeyStore 检索私钥时,我需要将其格式化为 PKCS8 但是我无法格式化私钥,因为您无法访问从密钥存储区编码的私钥。 有没有办法生成 PKCS8 格式的对?或者也许是一种解决方法,以便在不访问编码的情况下格式化私钥?

生成密钥:

    fun generateRSAKey(context: Context): KeyPair {
        val keyPairGenerator = KeyPairGenerator.getInstance(
            AppConst.RSA, "AndroidKeyStore"
        )
        val spec:AlgorithmParameterSpec
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) {
             spec = KeyGenParameterSpec.Builder(
                    "privateKey",
                    KeyProperties.PURPOSE_SIGN  or KeyProperties.PURPOSE_VERIFY
                )
                 .setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
                 .setKeySize(1024)
                .build()
        }
        else
        {
            val start: Calendar = Calendar.getInstance()
            val end: Calendar = Calendar.getInstance()
            end.add(Calendar.YEAR, 100)
             spec = KeyPairGeneratorSpec.Builder(context)
                .setAlias("privateKey")
                .setSubject(X500Principal("CN=Sample Name, O=Android Authority"))
                .setSerialNumber(BigInteger.ONE)
                .setStartDate(start.time)
                .setEndDate(end.time)
                .build()
        }
        keyPairGenerator.initialize(spec)
        return  keyPairGenerator.generateKeyPair()

    }

获取钥匙:

val keyStore=EncryptionUtil.getKeyStoreInstance()
            keyStore.load(null)
            val entry: KeyStore.Entry = keyStore.getEntry("privateKey", null)
            val privateKey: PrivateKey = (entry as KeyStore.PrivateKeyEntry).privateKey
            val decryptedAES = EncryptionUtil.decryptRSA(
                android.util.Base64.decode(
                    aesKey,
                    android.util.Base64.DEFAULT
                ), KeyFactory.getInstance("RSA").generatePrivate(PKCS8EncodedKeySpec(privateKey.encoded))
            )
android kotlin encryption rsa
1个回答
0
投票

可能会延迟四年,但我认为没有什么改变。

最好的解决方案是 Bouncy Castle Kotlin:

https://github.com/bcgit/bc-kotlin

看来他们需要更多的人力来发展。希望这个答案对他们的宣传有帮助。

...讨厌 Google 的又一个原因...哈哈

顺便说一句,Bouncy Castle 由在澳大利亚注册的慈善机构管理。去算一下...

© www.soinside.com 2019 - 2024. All rights reserved.