Необходимо создать DHPublicKey из y, p, g как BigIntegers
Мне нужен DHPublicKey для шифрования некоторых данных. Поэтому мне были предоставлены все необходимые параметры как BigIntegers (y, p, g). К сожалению, я не вижу прямого способа создания объекта с открытым ключом из этих параметров, который бы соответствовал интерфейсу DHPublicKey. Любая идея?
1 ответ
Решение
KeyFactory keyFactory;
KeyPairGenerator kpg;
DHPublicKey originalDhPubKey, fromSpecsDhPubKey;
DHPublicKeySpec dhPubKeySpecs;
KeyPair kp;
BigInteger p, g, y;
// generate a DH key pair
kpg = KeyPairGenerator.getInstance("DH");
kp = kpg.generateKeyPair();
// get the DH public key
originalDhPubKey = (DHPublicKey) kp.getPublic();
// get P, G and Y specs
p = originalDhPubKey.getParams().getP();
g = originalDhPubKey.getParams().getG();
y = originalDhPubKey.getY();
// get a DH KeyFactory
keyFactory = KeyFactory.getInstance("DH");
// create a DHPublicKeySpec with the specs you have
dhPubKeySpecs = new DHPublicKeySpec(y, p, g);
// get the DHPublicKey
fromSpecsDhPubKey = (DHPublicKey) keyFactory.generatePublic(dhPubKeySpecs);
// Check that the DH public values are equal
System.out.println(originalDhPubKey.getY().equals(fromSpecsDhPubKey.getY()));