Диффи-Хеллман в swift может работать с JAVA
Я пытаюсь разработать key-exchange 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);
Я использовал все, если эта ссылка, но они не помогли мне.
- https://github.com/gsurma/diffie_hellman_key_exchange
- https://gist.github.com/jmcd/b9a212df5dfa88b6d8dcb52c51b6be6b
- https://developer.apple.com/documentation/security/1643701-seckeycreatewithdata
- https://developer.apple.com/documentation/security/seckey
- https://developer.apple.com/documentation/security/secure_transport