2015-04-04 3 views
0

В связи с этим вопросом; Java (Android) Decrypting msg with IV attachedУдаление символов из расшифрованной строки Base64 в Java

Мое сообщение расшифровывается как штраф, но с нежелательными данными по байту IV.
Я пытаюсь удалить прикрепленный IV, но он не удаляет все символы, и какой-то символ всегда остается позади. Я не уверен, как мне вычислить длину закодированного IV, чтобы удалить ненужные символы.

public String decrypt(String cipherText, byte[] encryptionKey) throws Exception { 
    SecretKeySpec key = new SecretKeySpec(encryptionKey, "AES");   
    cipher.init(Cipher.DECRYPT_MODE, key, iV); 
    String decrypt = new String(cipher.doFinal(Base64.decode(cipherText, Base64.DEFAULT))); 

    byte[] decryptData = new byte[decrypt.getBytes().length - iV.getIV().length]; 
    System.arraycopy(decrypt.getBytes(), iV.getIV().length, decryptData, 0, decrypt.getBytes().length - iV.getIV().length); 

    Log.d("decrypt = ", decrypt); 

    decrypt = new String(decryptData, "UTF-8"); 

    return decrypt; 
} 

ответ

0

Вам необходимо удалить IV перед расшифровкой не после него, поскольку это параметр дешифрования. Поскольку IV добавляется к зашифрованному тексту, нет необходимости сохранять его в другом месте (нет необходимости в вашей ссылке iV).

byte[] ciphertextBytes = Base64.decode(cipherText, Base64.DEFAULT); 
IvParameterSpec iv = new IvParameterSpec(ciphertextBytes, 0, 16); 
ciphertextBytes = Arrays.copyOfRange(ciphertextBytes, 16, ciphertextBytes.length); 

SecretKeySpec key = new SecretKeySpec(encryptionKey, "AES");   
cipher.init(Cipher.DECRYPT_MODE, key, iv); 
String decrypt = new String(cipher.doFinal(ciphertextBytes), "UTF-8"); 
+0

Log выходы - «javax.crypto.IllegalBlockSizeException: последний блок неполон в расшифровке» – Danran

+0

Вы можете проверить, как долго 'ciphertextBytes' находится перед расшифровкой? Вероятно, это проблема с индексом 'Arrays.copyOfRange()' –

+0

Удаление-ivLen (16), делает дешифровку отлично. Отправляя сообщение «эй», длина ciphertextBytes равна 16 – Danran

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