Диффи-Хеллман в swift может работать с JAVA - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь разработать обмен ключами dif-Hellman между Swift и Java-сервером.Я прочитал всю ссылку о Диффи Хетлмане и во всех них сказал, что я должен использовать (g^a mod p)^b mod p = g^ab mod p для создания PublicKey.

Но когда я начал делиться своим PublicKey с сервером, я столкнулся с этим исключением

java.security.spec.InvalidKeySpecException: Inappropriate key specification
  at com.sun.crypto.provider.DHKeyFactory.engineGeneratePublic(DHKeyFactory.java:85)
  at java.security.KeyFactory.generatePublic(KeyFactory.java:334)
  at com.pushro.server.managers.server.RequestsHandler.processKeyExchange(RequestsHandler.java:867)
  at com.pushro.server.managers.server.RequestsHandler.processPacket(RequestsHandler.java:275)
  at com.pushro.server.managers.server.RequestsHandler.processPacket(RequestsHandler.java:1315)
  at com.pushro.server.managers.server.RequestsHandler.access$000(RequestsHandler.java:40)
  at com.pushro.server.managers.server.RequestsHandler$1.handleEvent(RequestsHandler.java:96)
  at com.pushro.server.managers.queue.DisruptorManager$WriteEventHandler.onEvent(DisruptorManager.java:37)
  at com.pushro.server.managers.queue.DisruptorManager$WriteEventHandler.onEvent(DisruptorManager.java:34)
  at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:129)
  at java.lang.Thread.run(Thread.java:748)
Caused by: java.security.InvalidKeyException: Invalid key format
  at com.sun.crypto.provider.DHPublicKey.<init>(DHPublicKey.java:127)
  at com.sun.crypto.provider.DHKeyFactory.engineGeneratePublic(DHKeyFactory.java:78)
  ... 10 more

Я использовал стандартный X509EncodedKeySpec для получения ключа и генерации секретного кода в Java.

X509EncodedKeySpec ks = new X509EncodedKeySpec(PublicKey_byte);
KeyFactory keyFactory = KeyFactory.getInstance("DH");
PublicKey clientPublicKey = keyFactory.generatePublic(ks);

Я прочитал всю эту ссылку, но они мне не помогли.

...