Метод шифрования требует, чтобы вход был фиксированной длины; вам нужно будет добавить отступы до необходимой длины, чтобы избежать этого исключения. Этот размер будет зависеть от размера ключа.
РЕДАКТИРОВАТЬ: Существует также потенциальная ошибка в вашей итерации data
: если его длина не делится на два, то вторая i++
вызовет IndexOutOfBoundsException
. Вам лучше увеличить i
на 2 в цикле for
и использовать [i]
и [i+1]
при доступе к данным:
for (int i = 0; i + 1 < data.length(); i += 2, k++)
{
results[k] = (byte) (Character.digit(data.charAt(i), 16) << 4);
results[k] += (byte) (Character.digit(data.charAt(i + 1), 16));
}