2013-12-09 4 views
1

일부 데이터를 암호화하려면 DHPublicKey가 필요합니다. 따라서 BigIntegers (y, p, g)로 필요한 모든 매개 변수가 제공되었습니다. 불행히도 DHPublicKey 인터페이스에 맞는 이러한 매개 변수에서 공개 키 개체를 만드는 방법이 없습니다. 아이디어가 있으십니까?y, p, g에서 BigIntegers로 DHPublicKey를 생성해야합니다.

답변

2
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()));