RSA в Java__________________

358
09 марта 2017, 22:14

У меня имеется, например, сгенерированный publicKey. Я с помощью метода .toString() сделал из него строковую переменную. Как я могу сделать из нее объект типа publicKey (обратное действие методу .toString();) Вот так выглядит та самая строковая переменная. Надо сделать из нее publicKey

13:23:08 Anonymous: Sun RSA public key, 2048 bits modulus: 21130715513758512048246165404386415659202007430838992703046979367788300865624615505151241454591781805095709634110387667439921119163170599591564603118933764428278634841065449757401479154110381843190148499871101056561477043162842821778693073269481956893210083788435539099322016627008495566825523002874479742907473946490045019978924831345338200001087472544662748551944530961613645062472224786849410306015449422181215236159447845987579979152307457088882132555320135705702398306371534089455846118556462526427865150585790610994384071166073124326858588827554373461026425073908703300847805583912152633870729245428137427131981 public exponent: 65537

Answer 1

Метод toString() не есть метод сериализации сертификата. Тебе необходимо использовать десериализаторы и сериализаторы:

//десериализация из массива байт bobEncodedPubKey
X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
//сериализация в массив байт
byte[] result = bobPubKey.getEncoded()

Оригинал ответа

Answer 2

Публичный ключ 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);
READ ALSO
Проблема отправки данных из java сервера к websocket клиенту на javascript

Проблема отправки данных из java сервера к websocket клиенту на javascript

Всем привет! У меня проблема, уже два дня копаюсь, но так и не решилЕсть сервер на джаве, и есть клиент на скрипте

380
Properties файл в качестве аргумента JVM?

Properties файл в качестве аргумента JVM?

Одно из требований к заданию по созданию CRUD приложения на Spring звучит следующим образом:

373
Не компилируются файлы java на windows xp

Не компилируются файлы java на windows xp

Примерно год назад установил jdk с целью программирования на языке javaТогда всё отлично работало, но вот недавно я решил возобновить изучение...

289
Общая высота View элементов

Общая высота View элементов

Есть активити в нем пару VIEW элементов, как сделать что бы одна родительская VIEW определяла высоту всем элементов, при этом она должны быть...

219