2017-01-14 127 views
1

我试图使用存储下面的代码在Android密钥库AES密钥:的Android密钥库:不支持的密钥算法:AES/CBC/PKCS5Padding

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关键?

+0

'CBC'和'PKCS5Padding'不是键的一部分,但键的大小是。 – zaph

+0

@zaph你想说我必须改变行SecretKeySpec( byteKey,0,byteKey.length,“AES/CBC/PKCS5Padding”);到新的SecretKeySpec( byteKey,0,byteKey.length,“AES”); ? – JoeFox

回答

1

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

有些猜测给出的错误信息只是使用“AES”。

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

的文档很稀薄最好的,我能找到的最接近的是SecretKeyFactory Algorithms:“AES”构造秘密密钥使用AES算法使用。参见:SecretKeyFactory Algorithms