2012-10-30 18 views
0

我有一個小程序,首先交換會話密鑰進行通信,並且它使用diffie-hellmann協議。 在java中第一部分被這樣完成的:如何從PublicKey得到未編碼的公共值字節

KeyPairGenerator keyPairGenerator1 = KeyPairGenerator.getInstance("DH"); 
keyPairGenerator1.initialize(Skip.sDHParameterSpec); 
KeyPair keyPair1 = keyPairGenerator1.generateKeyPair(); 
byte[] localKey1 = keyPair1.getPublic().getEncoded(); 
KeyAgreement keyAgreement1 = KeyAgreement.getInstance("DH"); 
keyAgreement1.init(keyPair1.getPrivate()); 
// getting remote key 
keyAgreement1.doPhase(theirPublicKey2, true); 
byte[] sharedKey1 = keyAgreement1.generateSecret(); 

然後localKey是發送到遠程部件,誰發送回數據的它們部分進行計算DH共享密鑰。 問題,另一個程序期望獲得行數據(大整數),並從Java程序發送X509編碼。

那麼如何從PublicKey獲取BigInteger(DH協議的本地Y值)呢? 或者也許有另一種方法來生成必要的DH參數?

回答

1

只投的關鍵,更專業的類型......

DHPublicKey localKey = (DHPublicKey) keyPair1.getPublic(); 
BigInteger localY = localKey.getY(); 

當然,如果你還沒有,您可能要檢索從localKey的參數以及預先定義的參數一致。

+0

哦,不要忘了驗證參數,不要忘記DH本身有助於防止竊聽... –

+0

我以爲我試過「keyPair.getPublic()instanceof DHPublicKey」,但顯然不是(或然後檢查別的東西)。謝謝你的回答。 – Dainius

+0

也許http://stackoverflow.com/questions/496928/what-is-the-difference-between-instanceof-and-class-isassignablefrom有幫助嗎? –