Android KeyStore:不支持的密钥算法:AES / CBC / PKCS5Padding

时间:2017-01-14 17:27:28

标签: android encryption aes keystore

我正在尝试使用以下代码在Android KeyStore中存储AES密钥:

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(...)'行无法生成throwig:

java.security.KeyStoreException: java.lang.IllegalArgumentException: Unsupported secret key algorithm: AES/CBC/PKCS5Padding

如何将我的密钥存储在Android.KeyStore中?

1 个答案:

答案 0 :(得分:1)

CBC和PKCS5Padding不是密钥的一部分,但密钥大小是。

在给出错误消息时稍微猜测只是使用“AES”。

SecretKey AESkey = new SecretKeySpec(byteKey, 0, byteKey.length, "AES");  

文档最好是最薄的,我能找到的最接近的是SecretKeyFactory Algorithms:“AES”构造用于AES算法的密钥。请参阅:SecretKeyFactory Algorithms