У меня имеется, например, сгенерированный publicKey. Я с помощью метода .toString() сделал из него строковую переменную. Как я могу сделать из нее объект типа publicKey (обратное действие методу .toString();)
Вот так выглядит та самая строковая переменная. Надо сделать из нее publicKey
13:23:08 Anonymous: Sun RSA public key, 2048 bits modulus: 21130715513758512048246165404386415659202007430838992703046979367788300865624615505151241454591781805095709634110387667439921119163170599591564603118933764428278634841065449757401479154110381843190148499871101056561477043162842821778693073269481956893210083788435539099322016627008495566825523002874479742907473946490045019978924831345338200001087472544662748551944530961613645062472224786849410306015449422181215236159447845987579979152307457088882132555320135705702398306371534089455846118556462526427865150585790610994384071166073124326858588827554373461026425073908703300847805583912152633870729245428137427131981 public exponent: 65537
Метод toString() не есть метод сериализации сертификата. Тебе необходимо использовать десериализаторы и сериализаторы:
//десериализация из массива байт bobEncodedPubKey
X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
//сериализация в массив байт
byte[] result = bobPubKey.getEncoded()
Оригинал ответа
Публичный ключ RSA состоит из модуля и экспоненты, которые задаются в виде BigInteger, соответственно для сериализации вам надо извлечь модуль и экспоненту сохранить их куда-то, а потом для десериализации сгенерировать обратно публичный ключ из модуля и экспоненты, типа:
//извлечение значений ключа
RSAPublicKey publicKey;
BigInteger modulus=publicKey.getModulus();
BigInteger exponent=publicKey.getPublicExponent();
//сериализация значений ключа
String modulusString=modulus.toString();
String exponentString=exponent.toString();
//восстановление ключа
RSAPublicKeySpec Spec = new RSAPublicKeySpec(new BigInteger(modulusString), new BigInteger(exponentString));
RSAPublicKey newPublicKey=KeyFactory.getInstance("RSA").generatePublic(Spec);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости