2017-01-14 5 views
1

ich einen AES-Schlüssel im Android Keystor mit folgendem Code zu speichern versuchen:Android Keystor: Nicht unterstützter geheimer Schlüssel Algorithmus: 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()); 

Die Zeile mit 'setEntry (...)' throwig versagt:

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

Wie kann ich meinen Schlüssel im Android.KeyStore speichern?

+0

'CBC' und' PKCS5Padding' sind nicht Teil eines Schlüssels, aber Schlüsselgröße ist. – zaph

+0

@zaph Sie wollen sagen, dass ich die Zeile ändern muss neue SecretKeySpec ( byteKey, 0, byteKey.length, "AES/CBC/PKCS5Padding"); zu neuem SecretKeySpec ( byteKey, 0, byteKey.length, "AES"); ? – JoeFox

Antwort

1

CBC und PKCS5Padding sind nicht Teil eines Schlüssels, aber die Schlüsselgröße ist.

Etwas raten angesichts der Fehlermeldung nur "AES" verwenden.

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

Die Dokumentation ist bestenfalls dünn und die nächstgelegene ich finden kann, ist SecretKeyFactory Algorithms: „AES“ Konstruiert geheimen Schlüssel zur Verwendung mit dem AES-Algorithmus. Siehe: SecretKeyFactory Algorithms.

Verwandte Themen