В связи с этим вопросом; 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;
}
Log выходы - «javax.crypto.IllegalBlockSizeException: последний блок неполон в расшифровке» – Danran
Вы можете проверить, как долго 'ciphertextBytes' находится перед расшифровкой? Вероятно, это проблема с индексом 'Arrays.copyOfRange()' –
Удаление-ivLen (16), делает дешифровку отлично. Отправляя сообщение «эй», длина ciphertextBytes равна 16 – Danran