2017-01-14 2 views
1

私は次のコードを使用してAndroidのKeyStoreの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(...)' の行をスローされません:

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