我对android keystore不太熟悉。在我的项目中,我包括以前创建的受密码保护的自定义密钥库,我需要从中提取具有已知别名的项目中的秘密密钥。我不想修改秘密密钥或不想创建任何秘密密钥。可能吗?我需要对android keystore进行一些说明。请在这种情况下帮助我。
答案 0 :(得分:0)
是的。您可以使用密钥别名获取密钥 看这段代码 密钥库仅用于保存加密密钥,请勿在此处保存密码!!!
private fun init() {
keyStore = KeyStore.getInstance(AndroidKeyStore)
keyStore.load(null)
if (!keyStore.containsAlias(KEY_ALIAS)) {
val keyGenerator: KeyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, AndroidKeyStore)
keyGenerator.init(
KeyGenParameterSpec.Builder(KEY_ALIAS, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.build())
keyGenerator.generateKey()
}
}
override fun encrypt(byteArray: ByteArray): ByteArray {
val keyStoreKey = keyStore.getKey(KEY_ALIAS, null)
val cipher = Cipher.getInstance(AES_MODE)
cipher.init(Cipher.ENCRYPT_MODE, keyStoreKey)
val encodedBytes = cipher.doFinal(byteArray)
val params = cipher.parameters
val iv = params.getParameterSpec(GCMParameterSpec::class.java).iv
saveIv(iv)
return encodedBytes
}
override fun decrypt(byteArray: ByteArray): ByteArray {
val iv = getIv()
val ivSpec = GCMParameterSpec(128, iv)
val keyStoreKey = keyStore.getKey(KEY_ALIAS, null) as SecretKey
val cipher = Cipher.getInstance(AES_MODE)
cipher.init(Cipher.DECRYPT_MODE, keyStoreKey, ivSpec)
return cipher.doFinal(byteArray)
}
这是我对android API级别的加密和解密> = 23 对于18> = API级别<23,您需要AES加密