2017-01-14 14 views
1

Я пытаюсь сохранить ключ AES в Android KeyStore используя следующий код:Android KeyStore: неподдерживаемый алгоритм секретного ключа 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 вы хотите сказать, что мне нужно изменить строку new 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.