【发布时间】:2019-06-10 12:03:22
【问题描述】:
当我们使用以下代码创建键集时:
val generator = KeyPairGenerator.getInstance(RSA)
generator.initialize(KEY_SIZE)
val keyPair = generator.genKeyPair()
那么当我们调用如下:
val cipher = Cipher.getInstance(RSA_TRANSFORMATION)
cipher.init(Cipher.DECRYPT_MODE, privateKey)
init 方法执行在 0-2 毫秒内完成。
但是当我们尝试使用以下内容创建密钥时,我们需要将私钥存储在密钥库中:
val keyPairGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore")
keyPairGenerator.initialize(keyGenParameterSpecBuilder.getProvider()
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
.setDigests(KeyProperties.DIGEST_SHA1)
.setKeySize(KEY_SIZE)
.build())
keyPairGenerator.genKeyPair()
相同的 init 方法执行时间超过 35-40 毫秒。此外,如果我们注释 setEncryptionPaddings 和 setDigest,init 方法会抛出异常。
预期输出: 能够在 KeyStore 中存储私钥并在 0-2 毫秒内执行 init 方法,就像没有提供程序生成器一样。
【问题讨论】:
-
40 毫秒并不是设置 RSA 私钥操作的很多时间,尤其是因为执行操作所花费的时间会使设置时间相形见绌。
-
在其他情况下,所花费的时间约为 0-2 毫秒,这是我期望的输出。
标签: android encryption private-key