Шифрование AES: InvalidKeyException: длина ключа не 128/192/256 бит

Я пытаюсь зашифровать строку на Android с помощью AES. Симметричный ключ определяется ранее с помощью алгоритма Диффи-Хеллмана и, кажется, в порядке (длина ключа составляет 128 бит, см. ниже).
Тем не менее, я получаю InvalidKeyException: "Key length not 128/192/256 bits."

код:

KeyAgreement keyAgree = KeyAgreement.getInstance("DH", "BC");
keyAgree.init(this.smartphonePrivKey);
keyAgree.doPhase(serverPubKey, true);
SecretKey key = keyAgree.generateSecret("AES");
System.out.println("Key Length: " + key.getEncoded().length);
System.out.println("Key Algorithm: "+ key.getAlgorithm());
System.out.println("Key Format: "+ key.getFormat());

byte[] encrypted = null;
  Cipher cipher;
  try {
   cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
   System.out.println("Allowed Key Length: "
     + cipher.getMaxAllowedKeyLength("AES"));
   cipher.init(Cipher.ENCRYPT_MODE, key);
   encrypted = cipher.doFinal("YEAH".getBytes("UTF8"));
  } catch (NoSuchAlgorithmException e) {
   e.printStackTrace();
  } catch (NoSuchPaddingException e) {
   e.printStackTrace();
  } catch (InvalidKeyException e) {
   e.printStackTrace();
  } catch (IllegalBlockSizeException e) {
   e.printStackTrace();
  } catch (BadPaddingException e) {
   e.printStackTrace();
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  }

приведенный выше код приводит к следующему выводу:

_12-10 20:24:53.119: INFO/System.out(757): Key Length: 128_  
_12-10 20:24:53.119: INFO/System.out(757): Key Algorithm: AES_   
_12-10 20:24:53.119: INFO/System.out(757): Key Format: RAW_  
_12-10 20:24:53.470: INFO/System.out(757): Allowed Key Length: 2147483647_ 

после этого, я получаю InvalidKeyException: Key length not 128/192/256 bits. но, как вы можете видеть, секретный ключ имеет длину 128 бит!

какие идеи?

2 ответов


созданный вами ключ 128 байт, а не 128 bits. "Длина ключа" должна быть 16.


это исключение в основном происходит из-за длины ключа, который вы передали для шифрования.Если вы используете шифрование AES, то количество символов должно быть длиной 128/192/256 бит. Например, вы можете использовать ключ из 16 символов, 24 символа или 32 символа.

String encrypted_data=AES.encrypt("HELLO","ASDFGHJKLASDFGHJ");

надеюсь, что это поможет...