2016-01-21 42 views
0

我有5個CRT組件 - primeP,primeQ,primeExponentP,primeExponentQ和crtCoefficient。有沒有一種方法可以從這些生成RSA密鑰對?Java - 從5個CRT組件生成RSA密鑰對

當我查看RSAPrivateCrtKeySpec和RSAPublicKeySpec時,缺少的參數是模數,privateExponent和publicExponent。

有人可以幫助我如何計算模數,privateExponent和publicExponent?

有沒有Bouncy城​​堡的實現來做到這一點?

謝謝! 山姆

回答

1

是的,這應該是可能的。那麼除非公開指數非常大,但這不太可能。

你可能猜測(即嘗試3,5,7,13,17和65537)或暴力公開指數 - 因爲它通常是一個小素數。 65537值(0x010001,第四個費馬素數)最有可能。那麼你可以calculate the private exponent。您可以使用密鑰對的符號/驗證來驗證您的猜測。

請注意,您確實擁有CRT參數而不是公鑰,這有點奇怪。其實,這太奇怪了,你可能必須自己編碼。

+0

謝謝,馬滕。你知道我們是否可以使用Bouncy Castle來做到這一點? – Sam

+0

我做了相反的事情:從私鑰中計算公鑰和CRT參數。之後有用於加速計算(對不起,我有點累,表示你應該先嚐試公開指數0x010001)。 –

0

只爲CRT規格中的缺失參數提供空值。關鍵工廠將弄清楚。

RSAPrivateCrtKeySpec privateSpec = new RSAPrivateCrtKeySpec(null, null, null, p, q, expP, expQ, coeff); 
KeyFactory factory = KeyFactory.getInstance("RSA"); 
privateKey = (RSAPrivateKey)factory.generatePrivate(privateSpec); 

模數爲primeP * primeQ。在大多數情況下,公開指數是65537.