2017-01-14 155 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