Вероятно, проблема заключается в том, что вы кодировали свой код без необходимости:
return new String(buffer);
Это будет интерпретировать буфер определенным образом как строку. Однако ключ состоит из случайных байтов, которые могут декодироваться до непредвиденных символов. Затем вы возвращаетесь обратно в байты, используя .getBytes()
, но к тому времени уже слишком поздно.
Просто оставьте ключ AES в байтах, и эта часть должна быть исправлена.
Кроме того read
- это не то же самое, что readNBytes
(и просто read
неверно), но это, вероятно, не ошибка; у вас возникнут проблемы с RSA, а не с ключом AES, если это будет проблемой.
Обратите внимание, что вы можете получить размер модуля в байтах, чтобы определить количество байтов для чтения, так что вы там также не нужно иметь константу 512 (которую я бы написал как KEY_SIZE / Byte.SIZE
, где KEY_SIZE = 4096
, чтобы хотя бы указать, что буфер точно соответствует размеру ключа.