@Nogok

Занимаюсь проектом, связанным с DSA алгоритмом. Знает кто, как отправить публичный ключ на сервер?

Создаю пару ключей с помощью java.security.KeyPair, вытягиваю публичный ключ, но он
а) Просто огромный, не смотря на все попытки его уменьшить, минимальная Json строка -- 3300+ символов
б) Не парсится обратно в ключ, ибо PublicKey -- класс, как я понимаю

Вот эксепшн:
java.lang.RuntimeException: Unable to invoke no-args constructor for interface java.security.PublicKey. Register an InstanceCreator with Gson for this type may fix this problem.
at com.google.gson.internal.ConstructorConstructor$12.construct(ConstructorConstructor.java:210)
  • Вопрос задан
  • 193 просмотра
Пригласить эксперта
Ответы на вопрос 2
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Вообще PublicKey реализует Serializable. Можно его сериализовать, потом запихнуть в Base64, и передавать в JSON'e.
НО
Зачем вы вообще это делаете? Если ключ передавать в открытом виде, то злоумышленник может организовать MiTM и всё ваше шифрование идёт лесом.
Ответ написан
Labunsky
@Labunsky
Я есть на хабре
а) Довольно странно. Обычно используются ключи размера не больше 3072 бит, что даже при избыточном кодировании в base64 дает 512 символов. Чисто байтовое представление же, соответственно, ограниченно 384 байтами. Возможно, стоит посмотреть на алгоритм упаковки ключа в JSON - вероятно, проблема находится где-то там.
б) Чтобы создать новый PublicKey, достаточно спарсить открытый ключ "y" как BigInteger и передать его в стандартный конструктор вместе с остальными открытыми параметрами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы