安卓 keystore : Unsupported secret key algorithm: AES/CBC/PKCS5Padding

标签 android encryption aes keystore

我正在尝试使用以下代码将 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/

相关文章:

java - 谷歌地图查看不工作

Java rsa解密模式行为

c# - 如何在 dotnet core 2.1 中使用 256 长 block 大小的 Rijndael 算法

.net - 使用 Rijndael 或 AES 加密对值进行加盐是一种基本的良好做法吗?

java - Rest API + Json 响应编码错误(我认为)

c# - 如何知道 Android 设备何时插入 USB 端口?

android - 设计一个 'new post' android Activity

c - OpenSSL C Cryptopals 挑战7

java - H2 数据库 : how to protect with encryption, 不暴露文件加密 key

java - Rijndael 128/256解密