2017-02-08 6 views
-3

Iam пытается шифровать данные с использованием AES-шифрования в моем приложении Java. Когда я запускаю код (ниже), я получаю:AES java.security.InvalidAlgorithmParameterException: Неверная длина IV: должно быть 16 байт.

java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 16 bytes long 
    at com.sun.crypto.provider.CipherCore.init(CipherCore.java:525) 
    at com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:346) 
    at javax.crypto.Cipher.implInit(Cipher.java:806) 
    at javax.crypto.Cipher.chooseProvider(Cipher.java:864) 
    at javax.crypto.Cipher.init(Cipher.java:1396) 
    at javax.crypto.Cipher.init(Cipher.java:1327) 
    at TestEncription.encryptData(TestEncription.java:164) 
    at TestEncription.encodeRequest(TestEncription.java:109) 
    at TestEncription.main(TestEncription.java:65) 

Код:

public String encryptData(String requestData, byte[] sessionKey, 
     String messageRefNo) throws Exception { 

    SecretKey secKey = new SecretKeySpec(sessionKey, "AES"); 
    Cipher cipher = Cipher.getInstance(symmetricKeyAlgorithm); 
    IvParameterSpec ivSpec = new IvParameterSpec(messageRefNo.getBytes("UTF-8")); 
    System.out.println("Seckey: "+secKey); 
    cipher.init(Cipher.ENCRYPT_MODE, secKey, ivSpec); 
    byte[] newData = cipher.doFinal(requestData.getBytes()); 

    return Base64.encodeBase64String(newData); 
} 

Что такое, что происходит не так здесь?

+1

«Неверная длина IV: должно быть 16 байт,» вы обеспечиваете IV байт [], который давно не ровно 16 байт. –

+0

Как насчет сообщения об ошибке неясно? – zaph

ответ

3

«Неверная длина IV: должно быть длиной 16 байт», вы предоставляете IV байт [], который не является ровно 16 байтами.

Как указывает @zaph, не используя случайную последовательность, она поражает цель иметь IV.

Что вы должны сделать, это обеспечить случайную последовательность таких как

Random rand = new SecureRandom(); 
byte[] bytes = new byte[16]; 
rand.nextBytes(bytes); 
IvParameterSpec ivSpec = new IvParameterSpec(bytes); 
+0

@downvoter какой-либо причине? –

+1

Принятый метод - использовать случайные байты для IV. IV может быть добавлен к зашифрованным данным для использования во время дешифрования, это не обязательно должно быть секретным. – zaph

+0

Работает сейчас ... Спасибо – Abhi1988

 Смежные вопросы

  • Нет связанных вопросов^_^