Intereting Posts
Как передавать данные между фрагментами «Tel», «sms» и «mailto» больше не работают в Android после обновления до кордовы 3.6.3 Проект LibGDX HelloWorld вылетает при запуске на Android-эмуляторе TargetApi не учитывается Лучшая Java Datastructure для хранения ключевой пары значений Eclipse не показывает окно Avd manager и проект Android Тест Android JUnit для SQLiteOpenHelper Как «перезапустить» приложение для Android в программном отношении Шаблон панели управления Android Ответ Входящий звонок в Android 6.0 Android небезопасный: tel: с приложением для телефонных разговоров Android – Ресурсы $ NotFoundException Стиль для представления, отображаемого в веб-просмотре, когда пользователь выбирает поле со списком Обнаружение щелчка на кнопке возврата панели действий – (OnOptionsItemSelected не вызывается при нажатии кнопки панели действий) Android 6 Marshmallow: запросы на некоторые конкретные разрешения мгновенно отклоняются без отображения ui

Шифрование 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. Но, как вы можете видеть, SecretKey имеет длину 128 бит!

Есть идеи?

благодаря

Solutions Collecting From Web of "Шифрование AES: InvalidKeyException: длина ключа не 128/192/256 бит"

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

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

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

Надеюсь эта помощь …