我正在尝试使用以下代码将 AES key 存储在 Android KeyStore 中:
SecretKey AESkey = new SecretKeySpec(
byteKey, 0, byteKey.length, "AES/CBC/PKCS5Padding");
if (ks == null)
{
ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
}
ks.deleteEntry("aes_key");
ks.setEntry("aes_key",
new KeyStore.SecretKeyEntry(AESkey),
new KeyProtection.Builder(KeyProperties.PURPOSE_ENCRYPT |
KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.build());
'setEntry(...)' 行失败抛出:
java.security.KeyStoreException: java.lang.IllegalArgumentException: Unsupported secret key algorithm: AES/CBC/PKCS5Padding
如何将我的 key 存储在 Android.KeyStore 中?
最佳答案
CBC 和 PKCS5Padding 不是 key 的一部分,但 key 大小是。
根据错误消息的猜测只是使用“AES”。
SecretKey AESkey = new SecretKeySpec(byteKey, 0, byteKey.length, "AES");
文档充其量是很薄的,我能找到的最接近的是 SecretKeyFactory Algorithms
:“AES”构造用于 AES 算法的 secret key 。请参阅:SecretKeyFactory Algorithms .
关于安卓 keystore : Unsupported secret key algorithm: AES/CBC/PKCS5Padding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652868/