2015-01-23 3 views
1

Я новичок в java. Я делаю шифрование и дешифрование видеофайлов. Когда я предоставляю ключ небольшой длины, он отлично работает без каких-либо ошибок. Если я дал ключ большей длины, это порождает ошибку.Неверный AES Длина ключа: 39bytes

private static void doCrypto(int cipherMode, String key, File inputFile, 
     File outputFile) throws CryptoException { 
    try {  
     Key secretKey = new SecretKeySpec(key.getBytes(), "AES"); 
     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
     cipher.init(cipherMode, secretKey);   
     FileInputStream inputStream = new FileInputStream(inputFile); 

     byte[] inputBytes = new byte[(int) inputFile.length()]; 
     inputStream.read(inputBytes); 

     byte[] outputBytes = cipher.doFinal(inputBytes); 

     FileOutputStream outputStream = new FileOutputStream(outputFile); 
     outputStream.write(outputBytes);    
     inputStream.close(); 
     outputStream.close(); 

    } catch(NoSuchPaddingException|NoSuchAlgorithmException|InvalidKeyException | BadPaddingException| IllegalBlockSizeException | IOException ex) { 
     throw new CryptoException("Error encrypting/decrypting file",ex); 
    } 

Я получаю ошибку, вызванную: java.security.InvalidKeyException: Invalid AES key length: 39 bytes

Пожалуйста, помогите мне исправить ошибку в коде ниже

ответ

0

Вы должны использовать определенный ключ с поддерживаемой длиной, что означает, что ваш ключ должен быть

  • 128 бит
  • 192 бит
  • 256 бит
  • ...

долго. Ваш (см. Сообщение об ошибке) составляет только 39 байт.

Так что вам нужно преобразовать (ключ) String (или лучше hash ключ раньше) в массив byte и принять первые п (где п один из указанных выше значений) byte из него.

import java.security.*; 

byte[] bytesOfMessage = key.getBytes("UTF-8"); 
MessageDigest md = MessageDigest.getInstance("SHA-256"); 
byte[] b = md.digest(bytesOfMessage); //Returns the SHA 256 hash and converts it into byte 
// Continue with your code 
Key secretKey = new SecretKeySpec(b , "AES"); 
... 
+0

Я получаю java.lang.ArrayIndexOutOfBoundsException ошибки: 10 –

+0

Я обновил свой код. Должен теперь работать правильно – jAC

+0

Спасибо за ответ Janes. Его работы прекрасны. Когда я дешифрую файл, он говорит, что параметры отсутствуют. –