我尝试使用以下代码将生成的密钥导入Android Keystore,如本示例所示:https://developer.android.com/reference/kotlin/android/security/keystore/KeyProtection
final SecretKey aesKey = new SecretKeySpec(myKeyByteArray, 0, myKeyByteArray.length, "AES");
final KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
keyStore.setEntry(
"my_key_alias",
new KeyStore.SecretKeyEntry(aesKey),
new KeyProtection.Builder(KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockMode(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.build());
但是,setEntry方法失败,并显示:java.security.KeyStoreException: Failed to import secret key. Keystore error code: -65536
API级别28会发生这种情况。
令人惊讶的是,如果我使用以下代码生成SecretKey,则密钥导入将起作用:
final KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(AES_KEY_LEN);
final SecretKey aesKey = keyGenerator.generateKey();
....
请注意,此KeyGenerator不会在安全硬件内生成密钥,而只是在应用程序进程内生成随机密钥。
如何将外部生成的对称密钥导入Android密钥存储区? 我是否需要使用一些公私钥对的变通办法来加密对称密钥?
答案 0 :(得分:0)
我在Android Studio虚拟设备(API 28)上测试了第一个代码段。 引发了如下异常:
java.security.KeyStoreException:无法导入密钥。密钥库错误代码:-6
此代码段对您有用吗?