Преобразование шестнадцатеричной строки в байтовый массив для расшифровки RSA - PullRequest
1 голос
/ 14 октября 2011

У меня есть шестнадцатеричная строка после шифрования RSA.Когда я преобразовываю его в байт [], расшифровка RSA дает javax.crypto.BadPaddingException: Blocktype mismatch: 0

Я использую этот метод для преобразования (получил его при переполнении стека)

public static byte[] hexStringToByteArray(String data) {
    int k = 0;
    byte[] results = new byte[data.length() / 2];
    for (int i = 0; i < data.length();) {
        results[k] = (byte) (Character.digit(data.charAt(i++), 16) << 4);
        results[k] += (byte) (Character.digit(data.charAt(i++), 16));
        k++;
    }
    return results;
}

Любые предложения, пожалуйста.

1 Ответ

1 голос
/ 14 октября 2011

Метод шифрования требует, чтобы вход был фиксированной длины; вам нужно будет добавить отступы до необходимой длины, чтобы избежать этого исключения. Этот размер будет зависеть от размера ключа.

РЕДАКТИРОВАТЬ: Существует также потенциальная ошибка в вашей итерации 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));
}
...