а) Довольно странно. Обычно используются ключи размера не больше 3072 бит, что даже при избыточном кодировании в base64 дает 512 символов. Чисто байтовое представление же, соответственно, ограниченно 384 байтами. Возможно, стоит посмотреть на алгоритм упаковки ключа в JSON - вероятно, проблема находится где-то там.
б) Чтобы создать новый PublicKey, достаточно спарсить открытый ключ "y" как BigInteger и
передать его в стандартный конструктор вместе с остальными открытыми параметрами.